Submission #1324103

#TimeUsernameProblemLanguageResultExecution timeMemory
1324103aritro_Mutating DNA (IOI21_dna)C++20
56 / 100
21 ms5668 KiB
#include<bits/stdc++.h>
using namespace std;

#define all(a) a.begin(),a.end()

string s1,s2;
int preSum[100000 + 15];
int A1[100000+15],T1[100000+15],C1[100000+15];
int A2[100000+15],T2[100000+15],C2[100000+15];

int get_distance(int x,int y){
    if((A1[y+1]-A1[x])!=(A2[y+1]-A2[x])) return -1;
    if((T1[y+1]-T1[x])!=(T2[y+1]-T2[x])) return -1;
    if((C1[y+1]-C1[x])!=(C2[y+1]-C2[x])) return -1;
    //subtask 1
    if((y-x)<=2){
        int cnt=0;
        for(int i=x;i<=y;i++) cnt+=(s1[i]!=s2[i]);
        return (cnt+1)/2;
    }
    return (preSum[y+1]-preSum[x])/2;
}

void init(string a,string b){
    s1=a;
    s2=b;
    int n=a.size();
    for(int i=0;i<n;i++) preSum[i+1]=(a[i]!=b[i])+preSum[i];
    for(int i=0;i<n;i++){
        if(a[i]=='A') A1[i+1]++;
        else if(a[i]=='T') T1[i+1]++;
        else C1[i+1]++;
        A1[i+1]+=A1[i];
        T1[i+1]+=T1[i];
        C1[i+1]+=C1[i];
    }
    for(int i=0;i<n;i++){
        if(b[i]=='A') A2[i+1]++;
        else if(b[i]=='T') T2[i+1]++;
        else C2[i+1]++;
        A2[i+1]+=A2[i];
        T2[i+1]+=T2[i];
        C2[i+1]+=C2[i];
    }
    return ;
}
#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...