이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
int fa[100010][3],fb[100010][3],cnt[100010][3][3];
void init(string a,string b){
int n=a.size();
a=" "+a; b=" "+b;
for (int i=1; i<=n; i++){
for (int j=0; j<3; j++) fa[i][j]=fa[i-1][j];
int ca,cb;
if (a[i]=='A') ca=0;
else if (a[i]=='T') ca=1;
else ca=2;
for (int j=0; j<3; j++) fb[i][j]=fb[i-1][j];
if (b[i]=='A') cb=0;
else if (b[i]=='T') cb=1;
else cb=2;
fa[i][ca]++; fb[i][cb]++;
for (int j=0; j<3; j++){
for (int k=0; k<3; k++) cnt[i][j][k]=cnt[i-1][j][k];
}
cnt[i][ca][cb]++;
}
}
int get_distance(int x,int y){
y++;
for (int i=0; i<3; i++){
if (fa[y][i]-fa[x][i]!=fb[y][i]-fb[x][i]) return -1;
}
int ans=0,tp[3][3];
for (int i=0; i<3; i++){
for (int j=0; j<3; j++) tp[i][j]=cnt[y][i][j]-cnt[x][i][j];
}
int t=min(tp[0][1],tp[1][0]);
tp[0][1]-=t; tp[1][0]-=t; ans+=t;
t=min(tp[0][2],tp[2][0]);
tp[0][2]-=t; tp[2][0]-=t; ans+=t;
t=min(tp[1][2],tp[2][1]);
tp[1][2]-=t; tp[2][1]-=t; ans+=t;
t=min({tp[0][1],tp[1][2],tp[2][0]});
ans+=2*t;
t=min({tp[1][0],tp[2][1],tp[0][2]});
ans+=2*t;
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |