8822022-01-25 09:34:01kidesoDNScpp11Időlimit túllépés 18/40342ms6264 KiB
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <cstdio>

using namespace std;

struct adat{
    int sz[5] = { 0,0,0,0,0 };
};

string s;
int k, maxi, i, N, maxi1, p;
bool jo;

int kar(char c) {
    if (c == 'A') return 1;
    if (c == 'C') return 2;
    if (c == 'G') return 3;
    return 4;
}

int main()
{
    cin >> s;
    N = s.length();
    vector <adat> x(N + 1);

    maxi = 1;

    for (i = 1; i <= N; ++i){
        k = kar(s[i - 1]);

        for (int j = 1; j <= 4; ++j){
            if (j == k) x[i].sz[j] = x[i - 1].sz[j] + 1;
            else x[i].sz[j] = x[i - 1].sz[j];

            x[i].sz[0] = max(x[i].sz[0], x[i].sz[j]);
        }
    }

    for (i = 2; i <= N; ++i){
        maxi1 = x[i].sz[0];

        k = max(1, i - 2 * maxi1 + 1);
        jo = false;

        while (!jo){
            for (int j = 1; j <= 4; ++j){
                p = x[i].sz[j] - x[k - 1].sz[j];
                if (2 * p >= i - k + 1){
                    jo = true;
                    break;
                }
            }

            k += 2;
        }

        k -= 2;
        maxi = max(maxi, i - k + 1);
    }

    cout << maxi;
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base18/40
1Elfogadva0/02ms1740 KiB
2Időlimit túllépés0/0342ms5432 KiB
3Elfogadva2/21ms2028 KiB
4Elfogadva2/21ms2048 KiB
5Elfogadva2/21ms2048 KiB
6Elfogadva2/21ms2060 KiB
7Elfogadva2/22ms2068 KiB
8Elfogadva4/467ms4048 KiB
9Elfogadva4/4150ms5532 KiB
10Időlimit túllépés0/4338ms3564 KiB
11Időlimit túllépés0/4310ms4328 KiB
12Időlimit túllépés0/4317ms4916 KiB
13Időlimit túllépés0/5342ms5576 KiB
14Időlimit túllépés0/5310ms6264 KiB