結果
問題 | No.896 友達以上恋人未満 |
ユーザー |
![]() |
提出日時 | 2019-09-28 14:23:07 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2,229 ms / 3,500 ms |
コード長 | 1,885 bytes |
コンパイル時間 | 1,624 ms |
コンパイル使用メモリ | 171,768 KB |
実行使用メモリ | 146,944 KB |
最終ジャッジ日時 | 2024-10-02 06:39:07 |
合計ジャッジ時間 | 17,303 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 7 |
ソースコード
#include <bits/stdc++.h>using namespace std;using lint = long long int;struct fast_ios { fast_ios(){ cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(20); }; } fast_ios_;#define FOR(i, begin, end) for(int i=(begin),i##_end_=(end);i<i##_end_;i++)#define IFOR(i, begin, end) for(int i=(end)-1,i##_begin_=(begin);i>=i##_begin_;i--)#define REP(i, n) FOR(i,0,n)#define IREP(i, n) IFOR(i,0,n)template<typename T> istream &operator>>(istream &is, vector<T> &vec){ for (auto &v : vec) is >> v; return is; }lint M, N, mx, ax, my, ay, MOD;using T = lint;void fast_integer_zeta(array<T, 1 << 24> &f){int N = f.size() - 1;vector<int> is_prime(N + 1, 1);for (int p = 2; p <= N; p++) if (is_prime[p]){for (int q = p * 2; q <= N; q += p) is_prime[q] = 0;for (int j = N / p * p; j > 0; j -= p) f[j / p] += f[j];}}array<lint, 1 << 24> uc;int main(){cin >> M >> N >> mx >> ax >> my >> ay >> MOD;vector<lint> X(M), Y(M), A(M), B(M);cin >> X >> Y >> A >> B;{REP(i, M){uc[X[i]] += Y[i];}lint x = X.back(), y = Y.back();FOR(i, M, N){x = (x * mx + ax) % MOD;y = (y * my + ay) % MOD;uc[x] += y;}}fast_integer_zeta(uc);lint retxor = 0;REP(i, M){if (A[i] >= 1 << 24) continue;lint ret = uc[A[i]];if (A[i] * B[i] < 1LL << 24) ret -= uc[A[i] * B[i]];printf("%lld\n", ret);retxor ^= ret;}lint a = A.back(), b = B.back();FOR(i, M, N){a = (a * mx + ax + MOD - 1) % MOD + 1;b = (b * my + ay + MOD - 1) % MOD + 1;if (a >= 1LL << 24) continue;lint ret = uc[a];if (a * b < 1LL << 24) ret -= uc[a * b];retxor ^= ret;}printf("%lld\n", retxor);}