Submission #1338928

#TimeUsernameProblemLanguageResultExecution timeMemory
1338928ttparin_Mutating DNA (IOI21_dna)C++20
100 / 100
21 ms4848 KiB
#include "dna.h"
#include<bits/stdc++.h>
using namespace std;
int aint[100010];
int cint[100010];
int ainc[100010];
int tinc[100010];
int cina[100010];
int tina[100010];
void init(string s1, string s2) {
    if(s1[0]=='A'){
            if(s2[0]=='T')
                tina[1]++;
            if(s2[0]=='C')
                cina[1]++;
        }
        if(s1[0]=='C'){
            if(s2[0]=='T')
                tinc[1]++;
            if(s2[0]=='A')
                ainc[1]++;
        }
        if(s1[0]=='T'){
            if(s2[0]=='A')
                aint[1]++;
            if(s2[0]=='C')
                cint[1]++;
        }
    for(int i=1;i<s1.size();i++){
        aint[i+1]=aint[i];
        cint[i+1]=cint[i];
        ainc[i+1]=ainc[i];
        tinc[i+1]=tinc[i];
        cina[i+1]=cina[i];
        tina[i+1]=tina[i];
        if(s1[i]=='A'){
            if(s2[i]=='T')
                tina[i+1]++;
            if(s2[i]=='C')
                cina[i+1]++;
        }
        if(s1[i]=='C'){
            if(s2[i]=='T')
                tinc[i+1]++;
            if(s2[i]=='A')
                ainc[i+1]++;
        }
        if(s1[i]=='T'){
            if(s2[i]=='A')
                aint[i+1]++;
            if(s2[i]=='C')
                cint[i+1]++;
        }
    }
}

int get_distance(int x, int y) {
    x++;
    y++;
    int ans=0;
    int aint1=aint[y]-aint[x-1];
    int cint1=cint[y]-cint[x-1];
    int ainc1=ainc[y]-ainc[x-1];
    int tinc1=tinc[y]-tinc[x-1];
    int cina1=cina[y]-cina[x-1];
    int tina1=tina[y]-tina[x-1];
    int ans1=min(aint1,tina1);
    aint1-=ans1;
    tina1-=ans1;
    int ans2=min(ainc1,cina1);
    ainc1-=ans2;
    cina1-=ans2;
    int ans3=min(cint1,tinc1);
    cint1-=ans3;
    tinc1-=ans3;
    if(aint1!=tinc1||aint1!=cina1)
        return -1;
    if(tina1!=ainc1||tina1!=cint1)
        return -1;
    ans=ans1+ans2+ans3;
    ans=ans+2*aint1+2*tina1;
	return ans;
}
#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...