Блог пользователя salt_n_ice

Автор salt_n_ice, история, 4 года назад, По-английски

Problem Here is what I tried:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
using ll = long long;

int main()
{
    ll t;
    cin>>t;
    while(t--)
    {
        ll n;
        cin>>n;
        string s;
        cin>>s;
        vector<ll> len, p;
        ll i=0, j=0;
        while(i<n && j<n)
        {
            while(j<n && s[i]==s[j])
                j++;
            p.push_back(j-i);
            i=j;
        }
        ll ans = 0;
        for(ll i=0; i<p.size(); ++i)
        {
            if(p[i]<2)
            {
                ans++;
                i++;
            }
            else
                ans++;
        }
        cout<<ans<<endl;
    }
}

Can someone briefly explain where am I going wrong?

  • Проголосовать: нравится
  • -9
  • Проголосовать: не нравится

»
4 года назад, # |
Rev. 2   Проголосовать: нравится +4 Проголосовать: не нравится

You idea behind the solution is incorrect. case:- 10101000

correct answer = 4

your answer = 3 (you are skipping the last block which could be used to maximize the operations on the prefixes)

refer to the editorial for an understanding.