239032026-01-31 16:47:43KristófDNScpp17Wrong answer 28/4030ms11460 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> prefix;
int n;
string s;
void tolt(char a,int k)
{
for(int i=0;i<n;i++)
    {
    prefix[i+1][k]=prefix[i][k];
    if(s[i]==a)prefix[i+1][k]++;
    }

}

int main() {
    cin>>s;
    n=s.size();
    int cntg=0;
    int ans=0;
    int l;
    int r;
    prefix.resize(n+1,vector<int>(4,0));
    
    tolt('A',0);
    tolt('C',1);
    tolt('G',2);
    tolt('T',3);
    int t=-1;
    //cout<<prefix[r+1][0]<<" "<<prefix[l][0];
    l=0;
    r=n-1;
    t++;
    while(l<r &&(prefix[r+1][t]-prefix[l][t])*2<(r-l+1))
        {
        if(s[r]!='A')r--;
        else l++;
        }
    ans=max(ans,r-l+1);
    l=0;
    r=n-1;
    t++;
    while(l<r &&(prefix[r+1][t]-prefix[l][t])*2<(r-l+1))
        {
        if(s[r]!='C')r--;
        else l++;
        }
    ans=max(ans,r-l+1);
    l=0;
    r=n-1;
    t++;
    while(l<r &&(prefix[r+1][t]-prefix[l][t])*2<(r-l+1))
        {
        if(s[r]!='G')r--;
        else l++;
        }
    ans=max(ans,r-l+1);
    l=0;
    r=n-1;
    t++;
    while(l<r &&(prefix[r+1][t]-prefix[l][t])*2<(r-l+1))
        {
        if(s[r]!='T')r--;
        else l++;
        }
    ans=max(ans,r-l+1);
    cout<<ans;
}
SubtaskSumTestVerdictTimeMemory
base28/40
1Accepted0/01ms508 KiB
2Wrong answer0/030ms11460 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Wrong answer0/21ms316 KiB
6Accepted2/21ms316 KiB
7Wrong answer0/21ms316 KiB
8Accepted4/48ms2988 KiB
9Accepted4/412ms4832 KiB
10Wrong answer0/416ms5940 KiB
11Wrong answer0/420ms7548 KiB
12Accepted4/421ms8540 KiB
13Accepted5/528ms10324 KiB
14Accepted5/528ms11460 KiB