제출 #538835

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

constexpr int MAXN = 1e5 + 7;
int type[MAXN][7]; // ac at ca ct ta tc
int num[MAXN][3][2];

void init(string a, string b) {
	for (int i = 0; i < a.size(); i++)
	{
		num[i + 1][(a[i] == 'A' ? 0 : (a[i] == 'C' ? 1 : 2))][0]++;
		num[i + 1][(b[i] == 'A' ? 0 : (b[i] == 'C' ? 1 : 2))][1]++;
		int curr = 6;
		if (a[i] == 'A' && b[i] == 'C')
			curr = 0;
		else if (a[i] == 'A' && b[i] == 'T')
			curr = 1;
		else if (a[i] == 'C' && b[i] == 'A')
			curr = 2;
		else if (a[i] == 'C' && b[i] == 'T')
			curr = 3;
		else if (a[i] == 'T' && b[i] == 'A')
			curr = 4;
		else if (a[i] == 'T' && b[i] == 'C')
			curr = 5;

		type[i + 1][curr]++;
		for (int h = 0; h < 6; h++){
			type[i + 1][h] += type[i][h];
			num[i + 1][h/2][h%2] += num[i][h/2][h%2];
		}

	}
}

int get_distance(int x, int y) {
	y++;
	if (num[y][0][0] - num[x][0][0] != num[y][0][1] - num[x][0][1] ||
		num[y][1][0] - num[x][1][0] != num[y][1][1] - num[x][1][1] ||
		num[y][2][0] - num[x][2][0] != num[y][2][1] - num[x][2][1])
		return -1;
	
	int curr = 0;
	int res = 0;
	curr += max(type[y][0] - type[x][0], type[y][2] - type[x][2]) - min(type[y][0] - type[x][0], type[y][2] - type[x][2]);
	res += min(type[y][0] - type[x][0], type[y][2] - type[x][2]);

	curr += max(type[y][1] - type[x][1], type[y][4] - type[x][4]) - min(type[y][1] - type[x][1], type[y][4] - type[x][4]);
	res += min(type[y][1] - type[x][1], type[y][4] - type[x][4]);

	curr += max(type[y][3] - type[x][3], type[y][5] - type[x][5]) - min(type[y][3] - type[x][3], type[y][5] - type[x][5]);
	res += min(type[y][3] - type[x][3], type[y][5] - type[x][5]);

	res += (curr / 3) * 2;
	return res;
}

컴파일 시 표준 에러 (stderr) 메시지

dna.cpp: In function 'void init(std::string, std::string)':
dna.cpp:10:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 |  for (int i = 0; i < a.size(); i++)
      |                  ~~^~~~~~~~~~
#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...