結果
| 問題 |
No.2308 [Cherry 5th Tune B] もしかして、真?
|
| コンテスト | |
| ユーザー |
shobonvip
|
| 提出日時 | 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;
// importbisect
template <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();
}
shobonvip