B. Reverse Binary Strings
链接:https://codeforces.com/contest/1437/problem/B
一看题便知道这题存在什么规律(别马后炮行不行啊喂....)
引入:意识到只有连续的1或者连续的0的时候才会去进行操作,如何消去连续的1呢?去找以0为端点,以当前1为端点的段,然后找个段调个头。同理对于0。为了使得操作的次数最少?我们让这俩操作一起做。
做法:
对于当前的连续1,我们去后面找到一段连续0,然后以它们为端点的段进行掉头操作。
这样应该是两两配对的,这样应该是两两配对的,如果有剩余的话,需要向上取整,可以理解为与整个串的端点的段进行掉头操作。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n, cnt = 0;
cin >> n;
string s;
cin >> s;
for(int i = 1; i < n; i++) {
if(s[i] == s[i-1]) {
cnt++;
}
}
if(cnt & 1) cout << cnt/2 + 1 << endl;
else cout << cnt/2 << endl;
}
}
vivo公司福利 368人发布