제출 #622277

#제출 시각아이디문제언어결과실행 시간메모리
622277alirezasamimi100DNA 돌연변이 (IOI21_dna)C++17
100 / 100
47 ms7400 KiB
#include "dna.h"
using namespace std;

const int N = 1e5 + 10;

int ps[3][3][N],n;

void init(string a, string b) {
    n=a.size();
    for(int i=0; i<n; i++){
        if(i){
            for(int j=0; j<3; j++){
                for(int k=0; k<3; k++){
                    ps[j][k][i]=ps[j][k][i-1];
                }
            }
        }
        int x=2,y=2;
        if(a[i]=='A') x=0;
        if(a[i]=='C') x=1;
        if(b[i]=='A') y=0;
        if(b[i]=='C') y=1;
        ps[x][y][i]++;
    }
}

int get_distance(int x, int y) {
    int tp[3][3],ans=0,k;
    for(int i=0; i<3; i++){
        for(int j=0; j<3; j++){
            tp[i][j]=ps[i][j][y];
            if(x) tp[i][j]-=ps[i][j][x-1];
        }
    }
    if(tp[0][1]+tp[0][2]!=tp[1][0]+tp[2][0] || tp[1][0]+tp[1][2]!=tp[0][1]+tp[2][1] || tp[2][1]+tp[2][0]!=tp[1][2]+tp[0][2]) return -1;
    k=min(tp[0][1],tp[1][0]);
    tp[0][1]-=k;
    tp[1][0]-=k;
    ans+=k;
    k=min(tp[0][2],tp[2][0]);
    tp[0][2]-=k;
    tp[2][0]-=k;
    ans+=k;
    k=min(tp[2][1],tp[1][2]);
    tp[2][1]-=k;
    tp[1][2]-=k;
    ans+=k;
	return ans+(tp[0][1]+tp[1][0])*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...