Submission #1033319

#TimeUsernameProblemLanguageResultExecution timeMemory
1033319MrPavlitoMutating DNA (IOI21_dna)C++17
100 / 100
32 ms6604 KiB
#include "dna.h"
#include <bits/stdc++.h>
//#define int long long
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define sc second
#define endl "\n"
#define pii pair<int,int>

using namespace std;

const int MAXN = 1e5+5;
const int mod7 = 1e9+7;
const long long inf = 1e18;

vector<vector<int>> pref(6, vector<int>(MAXN));


void init(std::string a, std::string b) {
    int n = a.size();
    for(int i=0; i<n; i++)
    {
        if(a[i] == 'A' && b[i]=='T')pref[0][i+1] = 1;
        else if(a[i] == 'A' && b[i]=='C')pref[1][i+1] = 1;
        else if(a[i] == 'T' && b[i]=='A')pref[2][i+1] = 1;
        else if(a[i] == 'T' && b[i]=='C')pref[3][i+1] = 1;
        else if(a[i] == 'C' && b[i]=='A')pref[4][i+1] = 1;
        else if(a[i] == 'C' && b[i]=='T')pref[5][i+1] = 1;
        pref[0][i+1] += pref[0][i];
        pref[1][i+1] += pref[1][i];
        pref[2][i+1] += pref[2][i];
        pref[3][i+1] += pref[3][i];
        pref[4][i+1] += pref[4][i];
        pref[5][i+1] += pref[5][i];
    }
}

int get_distance(int x, int y) {
	vector<int> niz(6);
	niz[0] = pref[0][y+1] - pref[0][x];
	niz[1] = pref[1][y+1] - pref[1][x];
	niz[2] = pref[2][y+1] - pref[2][x];
	niz[3] = pref[3][y+1] - pref[3][x];
	niz[4] = pref[4][y+1] - pref[4][x];
	niz[5] = pref[5][y+1] - pref[5][x];
	if(niz[0] + niz[1] == niz[2]+niz[4] && niz[2] + niz[3] == niz[0] + niz[5] && niz[4] + niz[5] == niz[1] + niz[3])
	{
        int atmin = min(niz[0], niz[2]);
        int atmax = max(niz[0], niz[2]);
        int acmin = min(niz[1], niz[4]);
        int acmax = max(niz[1], niz[4]);
        int tcmin = min(niz[3], niz[5]);
        int tcmax = max(niz[3], niz[5]);
        int rez = atmin + acmin + tcmin;
        atmax -= atmin;
        acmax -= acmin;
        tcmax -= tcmin;
        rez+= max({atmax, acmax, tcmax})*2;
        return rez;
	}
    else return -1;
}

/*
6 3
ATACAT
ACTATA
1 3
4 5
3 5
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...