結果
問題 | No.1245 ANDORゲーム(calc) |
ユーザー |
|
提出日時 | 2022-12-25 19:42:46 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 281 ms / 2,000 ms |
コード長 | 1,272 bytes |
コンパイル時間 | 2,154 ms |
コンパイル使用メモリ | 196,464 KB |
最終ジャッジ日時 | 2025-02-09 20:58:14 |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
ソースコード
#include <bits/stdc++.h>using namespace std;int main() {int N, Q;cin >> N >> Q;vector<int> A(N);for (int i = 0; i < N; i++) cin >> A[i];string S;cin >> S;vector<long long> a0(30);vector<long long> a1(30);for (int d = 0; d < 30; d++) {int z = 0, o = 1;int sum0 = 0, sum1 = 0;for (int i = 0; i < N; i++) {if (S[i] == '0') {int sub_sum0 = z, sub_sum1 = o;z &= (A[i] >> d) & 1;o &= (A[i] >> d) & 1;sub_sum0 -= z; sub_sum1 -= o;sum0 += sub_sum0; sum1 += sub_sum1;} else {int sub_sum0 = -z, sub_sum1 = -o;z |= (A[i] >> d) & 1;o |= (A[i] >> d) & 1;sub_sum0 += z; sub_sum1 += o;sum0 += sub_sum0; sum1 += sub_sum1;}}a0[d] = sum0; a1[d] = sum1;}while (Q--) {int t;cin >> t;long long score = 0;for (int d = 0; d < 30; d++) {if (((t >> d) & 1) == 0) {score += a0[d] * (1 << d);} else {score += a1[d] * (1 << d);}}cout << score << endl;}}