看着题解修改了下代码,还是不行。
#include<iostream>
#define N 100005
using namespace std;
int s[N][5][5];
int anss[5][5];
int dna(char c){
if(c=='A') return 0;
if(c=='T') return 1;
if(c=='C') return 2;
return -1;//Cute green melon
}
void init(string a, string b){
int n=a.size();
for(int i=1;i<=n;i++){
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
s[i][j][k]=s[i-1][j][k];
}
}
s[i][dna(a[i-1])][dna(b[i-1])]++;
}
}
int get_distance(int x, int y){
int ans=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
anss[i][j]=s[y+1][i][j]-s[x][i][j];
}
}
for(int i=0;i<3;i++){
for(int j=i+1;j<3;j++){
int minn=min(anss[i][j], anss[j][i]);
ans+=minn;
anss[i][j]-=minn;
anss[j][i]-=minn;
}
}
if(anss[0][1]!=anss[1][2] || anss[1][2]!=anss[2][0] || anss[1][0]!=anss[2][1] || anss[2][1]!=anss[0][2]) return -1;
if(anss[0][1]!=0) return ans+2*anss[0][1];
else return ans+2*anss[1][0];
}