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; } }