Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #ifdef INSANE
- #include "debug.h"
- #else
- #define dbg(x...)
- #endif
- #define Buildup() ios::sync_with_stdio(false), cin.tie(nullptr)
- #define make_unique(x) (x).resize(unique(all(x)) - x.begin())
- #define rotate(x, k) rotate(x.begin(), x.begin() + k, x.end())
- #define all(x) (x).begin(), (x).end()
- #define rall(x) (x).rbegin(), (x).rend()
- #define sz(x) (int)(x).size()
- #define PI 3.14159265358979323846
- #define ld long double
- #define ull unsigned long long
- #define ll long long
- #define nl '\n'
- #define ff first
- #define ss second
- #define pb push_back
- #define pp pop_back
- #define ins insert
- #define lb lower_bound
- #define ub upper_bound
- #define pr pair
- #define Nl '\n'
- #define itn int
- // constexpr int M = 1E9+7; //998244353
- // constexpr int N = 1E5+5;
- constexpr int inf = 1E9;
- /* .....!! Start by doing what's necessary; then do what's possible;
- and suddenly you are doing impossible !!..... */
- int main(){
- #ifdef INSANE
- freopen("errorf.in", "w", stderr);
- #endif
- Buildup();
- int ___ = 1;
- cin >> ___;
- while(___--){
- string s;
- cin>>s;
- int n = sz(s);
- s += s[n-1];
- vector<array<int, 2>> seg;
- queue<int> q[2];
- int st = s[0]-'0', c = 0;
- for(int i=0; i<n; i++){
- if(s[i] == s[i+1]){
- seg.pb({st, s[i]-'0'});
- q[st].push(c++);
- st = s[i]-'0';
- }
- }
- // for(int i=0; i<2; i++){
- // while(!q[i].empty()){
- // cout<<q[i].front()<<" ";
- // q[i].pop();
- // }
- // cout<<nl;
- // }
- vector<int> vis(c);
- int ans = 0;
- for(int i=0; i<c; i++){
- if(vis[i]) continue;
- ans += 1;
- vis[i] = 1;
- auto [l, r] = seg[i];
- q[l].pop();
- int cp = i;
- while(!q[r^1].empty()){
- int nxt = q[r^1].front();
- if(nxt < cp) break;
- cp = nxt;
- q[r^1].pop();
- vis[cp] = 1;
- r = seg[cp][1];
- }
- }
- cout<<ans<<nl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment