結果
| 問題 |
No.896 友達以上恋人未満
|
| コンテスト | |
| ユーザー |
vwxyz
|
| 提出日時 | 2024-04-15 13:34:47 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,183 ms / 3,500 ms |
| コード長 | 1,659 bytes |
| コンパイル時間 | 793 ms |
| コンパイル使用メモリ | 90,960 KB |
| 実行使用メモリ | 136,400 KB |
| 最終ジャッジ日時 | 2024-10-05 10:15:12 |
| 合計ジャッジ時間 | 5,837 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 7 |
ソースコード
#include <iostream>
#include <vector>
using namespace std;
#define int long long
signed main() {
int M, N, mulX, addX, mulY, addY, mod;
cin >> M >> N >> mulX >> addX >> mulY >> addY >> mod;
vector<int> X(M), Y(M), A(M), B(M);
for (int i = 0; i < M; ++i)
cin >> X[i];
for (int i = 0; i < M; ++i)
cin >> Y[i];
for (int i = 0; i < M; ++i)
cin >> A[i];
for (int i = 0; i < M; ++i)
cin >> B[i];
vector<int> cnt(mod, 0);
for (int i = 0; i < M; ++i)
cnt[X[i]] += Y[i];
int x = X.back(), y = Y.back();
for (int i = M; i < N; ++i) {
x = (1LL * x * mulX + addX) % mod;
y = (1LL * y * mulY + addY) % mod;
cnt[x] += y;
}
vector<bool> is_prime(mod, true);
for (int p = 2; p < mod; ++p) {
if (is_prime[p]) {
for (int x = (mod - 1) / p; x > 0; --x)
cnt[x] += cnt[x * p];
for (int i = 2 * p; i < mod; i += p)
is_prime[i] = false;
}
}
int ans = 0;
for (int i = 0; i < M; ++i) {
int a = A[i], b = B[i];
int c = 0;
if (a < mod)
c += cnt[a];
if (1LL * a * b < mod)
c -= cnt[a * b];
cout << c << endl;
ans ^= c;
}
int a = A.back(), b = B.back();
for (int i = M; i < N; ++i) {
a = ((1LL * a * mulX + addX + mod - 1) % mod) + 1;
b = ((1LL * b * mulY + addY + mod - 1) % mod) + 1;
int c = 0;
if (a < mod)
c += cnt[a];
if (1LL * a * b < mod)
c -= cnt[a * b];
ans ^= c;
}
cout << ans << endl;
return 0;
}
vwxyz