結果
| 問題 |
No.2308 [Cherry 5th Tune B] もしかして、真?
|
| コンテスト | |
| ユーザー |
srjywrdnprkt
|
| 提出日時 | 2023-06-18 01:55:25 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 440 ms / 2,000 ms |
| コード長 | 1,744 bytes |
| コンパイル時間 | 2,148 ms |
| コンパイル使用メモリ | 200,192 KB |
| 最終ジャッジ日時 | 2025-02-14 22:27:06 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 39 |
コンパイルメッセージ
main.cpp: In function ‘void solve()’:
main.cpp:82:18: warning: ‘r2’ may be used uninitialized [-Wmaybe-uninitialized]
82 | cout << (X[r2] ? "True" : "False") << endl;
| ^
main.cpp:51:30: note: ‘r2’ was declared here
51 | int N, l, r, c, idx, l2, r2;
| ^~
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
//RSQ (0-indexed)
template<class T> struct BIT {
vector<T> bit;
int N;
BIT (int n){
N = n;
bit.resize(N);
}
void add(int loc, T val){
loc++;
while(loc <= N){
bit[loc-1] += val;
loc += loc & -loc;
}
}
T sum(int l, int r){
T res = _sum(r) - _sum(l-1);
return res;
}
T _sum(int r){
r++;
T res = 0;
while(r > 0){
res += bit[r-1];
r -= r & -r;
}
return res;
}
};
int f(int a, int b, string &op){
if (op == "and") return a & b;
else if (op == "or") return a | b;
else if (op == "xor") return a ^ b;
else{
if (a) return b;
else return 1;
}
}
void solve(){
int N, l, r, c, idx, l2, r2;
cin >> N;
string S;
vector<int> X(N);
vector<string> Y(N-1);
BIT<int> tree(N);
for (int i=0; i<N; i++){
tree.add(i, 1);
}
for (int i=0; i<N; i++){
cin >> S;
X[i] = (S == "True" ? 1 : 0);
}
for (int i=0; i<N-1; i++) cin >> Y[i];
for (int i=0; i<N-1; i++){
cin >> idx;
l=-1; r=N-1;
while(r-l>1){
c = (l+r)/2;
if (tree.sum(0, c) >= idx) r=c;
else l=c;
}
l2=-1; r2=N-1;
while(r2-l2>1){
c = (l2+r2)/2;
if (tree.sum(0, c) >= idx+1) r2=c;
else l2=c;
}
tree.add(r, -1);
X[r2] = f(X[r], X[r2], Y[r]);
}
cout << (X[r2] ? "True" : "False") << endl;
}
int main(){
int T;
cin >> T;
while(T){
T--;
solve();
}
return 0;
}
srjywrdnprkt