题意
输入
输出
思路
先预处理包含的1100
的个数,然后计算在改变位置改变后对改变前的影响(可以分别计算在改变位置处1100
的个数,计算差值),注意遍历的边界范围
示例代码
void solve() {
string s;
cin >> s;
int q;
cin >> q;
int cnt = 0;
fer(i, 0, s.size() - 3){
if(s.substr(i, 4) == "1100") cnt++;
}
while(q--){
int ind, v;
cin >> ind >> v;
ind--;
int cnt1 = 0, cnt2 = 0;
// 改变前
fer(i, max(0, ind - 3), min((int)s.size() - 3, ind + 1)){
if(s.substr(i, 4) == "1100") cnt1++;
}
// 改变后
s[ind] = char(v + '0');
fer(i, max(0, ind - 3), min((int)s.size() - 3, ind + 1)){
if(s.substr(i, 4) == "1100") cnt2++;
}
cnt += cnt2 - cnt1;
if(cnt >= 1) cout << "YES" << '\n';
else cout << "NO" << '\n';
}
}