3完だけど一応レート増してた回。
https://codeforces.com/contest/1292/problem/A
問題
2*Nのグリッドがある。
ここでQ個のクエリが与えられる。
各クエリでは、1つのマスが指定され、そのマスの移動の可否が切り替えられる。
切り替え後の状態において、(1,1)から隣接マスをたどり(2,N)へ移動可能か答えよ。
解法
移動できない条件は、2つの行で列の差が1以内の2マスがともに移動不可な場所がある場合である。
そこで、そのようなマスの対を数え、クエリ毎に増減差分を計算していこう。
int N,Q; int C[2][202020]; void solve() { int i,j,k,l,r,x,y; string s; cin>>N>>Q; int num=0; FOR(i,Q) { cin>>y>>x; y--; if(C[y][x]==1) { if(C[y^1][x-1]) num--; if(C[y^1][x]) num--; if(C[y^1][x+1]) num--; C[y][x]=0; } else { if(C[y^1][x-1]) num++; if(C[y^1][x]) num++; if(C[y^1][x+1]) num++; C[y][x]=1; } if(num) cout<<"No"<<endl; else cout<<"Yes"<<endl; } }
まとめ
まぁこれはまだ簡単だね。