結果
問題 | No.1245 ANDORゲーム(calc) |
ユーザー |
|
提出日時 | 2020-10-02 22:29:03 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 277 ms / 2,000 ms |
コード長 | 1,502 bytes |
コンパイル時間 | 1,841 ms |
コンパイル使用メモリ | 194,452 KB |
最終ジャッジ日時 | 2025-01-15 00:40:52 |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define rep(i, n) for(int i = 0; i < n; i++)#define rep2(i, x, n) for(int i = x; i <= n; i++)#define rep3(i, x, n) for(int i = x; i >= n; i--)#define elif else if#define sp(x) fixed << setprecision(x)#define pb push_back#define eb emplace_back#define all(x) x.begin(), x.end()#define sz(x) (int)x.size()using ll = long long;using pii = pair<int, int>;using pil = pair<int, ll>;using pli = pair<ll, int>;using pll = pair<ll, ll>;const int MOD = 1000000007;//const int MOD = 998244353;const int inf = (1<<30)-1;const ll INF = (1LL<<60)-1;const double pi = acos(-1.0);const double EPS = 1e-10;template<typename T> bool chmax(T &x, const T &y) {return (x < y)? (x = y, true) : false;};template<typename T> bool chmin(T &x, const T &y) {return (x > y)? (x = y, true) : false;};int main(){int N, Q;cin >> N >> Q;int A[N];rep(i, N) cin >> A[i];string S;cin >> S;ll ans[30][2];rep(i, 30){rep(k, 2){ans[i][k] = 0;int x = k<<i;rep(j, N){int y;if(S[j] == '0') y = ((x&A[j])&(1<<i)), ans[i][k] += x-y, x = y;else y = ((x|A[j])&(1<<i)), ans[i][k] += y-x, x = y;}}}while(Q--){int t;cin >> t;ll sum = 0;rep(i, 30){if(t & (1<<i)) sum += ans[i][1];else sum += ans[i][0];}cout << sum << endl;}}