求调
  • 板块灌水区
  • 楼主GreenMelon
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/9/29 15:23
  • 上次更新2024/9/29 19:34:02
查看原帖
求调
970141
GreenMelon楼主2024/9/29 15:23

看着题解修改了下代码,还是不行。

P8521

#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];
}
2024/9/29 15:23
加载中...