Submission #1334807

#TimeUsernameProblemLanguageResultExecution timeMemory
1334807activedeltorreDNA 돌연변이 (IOI21_dna)C++20
100 / 100
22 ms6892 KiB
#include "dna.h"

#include <cstdio>
#include <cassert>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int spar[200005][11];
void init(std::string a, std::string b) {
    int n=a.size();
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=9;j++)
        {
            spar[i][j]=spar[i-1][j];
        }
        if(a[i-1]=='A')
        {
            spar[i][1]++;
        }
        else if(a[i-1]=='C')
        {
            spar[i][2]++;
        }
        else
        {
            spar[i][3]++;
        }
        if(b[i-1]=='A')
        {
            spar[i][1]--;
        }
        else if(b[i-1]=='C')
        {
            spar[i][2]--;
        }
        else
        {
            spar[i][3]--;
        }
        if(a[i-1]=='A' && b[i-1]=='C')
        {
            spar[i][4]++;
        }
        else if(a[i-1]=='C' && b[i-1]=='A')
        {
            spar[i][5]++;
        }
        if(a[i-1]=='T' && b[i-1]=='C')
        {
            spar[i][6]++;
        }
        else if(a[i-1]=='C' && b[i-1]=='T')
        {
            spar[i][7]++;
        }
        if(a[i-1]=='T' && b[i-1]=='A')
        {
            spar[i][8]++;
        }
        else if(a[i-1]=='A' && b[i-1]=='T')
        {
            spar[i][9]++;
        }
    }
}

int get_distance(int x, int y) {
    int cnt[11];
    x++;
    y++;
   // cout<<"q "<<x<<" "<<y<<'\n';
    for(int i=1;i<=9;i++)
    {
        cnt[i]=spar[y][i]-spar[x-1][i];
        //cout<<i<<" "<<cnt[i]<<'\n';
    }
    if(cnt[1]!=0 ||cnt[2]!=0 ||cnt[3]!=0)
    {
        return -1;
    }
    int op=0,rest=0;
    op+=min(cnt[4],cnt[5]);
    rest+=max(cnt[4],cnt[5])-min(cnt[4],cnt[5]);
    op+=min(cnt[6],cnt[7]);
    rest+=max(cnt[6],cnt[7])-min(cnt[6],cnt[7]);
    op+=min(cnt[8],cnt[9]);
    rest+=max(cnt[8],cnt[9])-min(cnt[8],cnt[9]);
    //cout<<"op "<<op<<" rest "<<rest<<'\n';
	return op+rest/3*2;
}
#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...