結果
問題 | No.2308 [Cherry 5th Tune B] もしかして、真? |
ユーザー |
![]() |
提出日時 | 2023-05-19 21:52:39 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 232 ms / 2,000 ms |
コード長 | 1,735 bytes |
コンパイル時間 | 4,401 ms |
コンパイル使用メモリ | 256,416 KB |
最終ジャッジ日時 | 2025-02-13 01:48:59 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 39 |
ソースコード
#include<bits/stdc++.h>#include<atcoder/all>using namespace std;using namespace atcoder;typedef modint998244353 mint;typedef long long ll;// importbisecttemplate <typename T>int bisect_left(vector<T> &X, T v){return lower_bound(X.begin(), X.end(), v) - X.begin();}template <typename T>int bisect_right(vector<T> &X, T v){return upper_bound(X.begin(), X.end(), v) - X.begin();}// -----int dat;bool hantei(int x){return x < dat;}int op(int a, int b){return a + b;}int e(){return 0;}void solve(){int n; cin >> n;vector<string> x(n), y(n-1);vector<int> s(n);for (int i=0; i<n; i++){cin >> x[i];}for (int i=0; i<n-1; i++){cin >> y[i];}vector<bool> f(n);for (int i=0; i<n; i++){if (x[i] == "True") f[i] = true;}segtree<int,op,e> seg1(n);segtree<int,op,e> seg2(n-1);for (int i=0; i<n; i++){seg1.set(i, 1);}for (int i=0; i<n-1; i++){seg2.set(i, 1);}for (int i=0; i<n-1; i++){cin >> s[i];s[i]--;dat = s[i] + 1;int x1 = seg1.max_right<hantei>(0);int z = seg2.max_right<hantei>(0);dat++;int x2 = seg1.max_right<hantei>(0);if (y[z] == "and"){if (f[x1] && f[x2]) f[x1] = true;else f[x1] = false;}else if (y[z] == "or"){if (f[x1] || f[x2]) f[x1] = true;else f[x1] = false;}else if (y[z] == "xor"){if ((f[x1] && !f[x2]) || (!f[x1] && f[x2])) f[x1] = true;else f[x1] = false;}else{if (f[x1]){f[x1] = f[x2];}else{f[x1] = true;}}seg1.set(x2, 0);seg2.set(z, 0);}dat = 1;int x3 = seg1.max_right<hantei>(0);if (f[x3]) cout << "True\n";else cout << "False\n";}int main(){ios_base::sync_with_stdio(false);cin.tie(NULL);int t; cin >> t;while(t--) solve();}