Submission #818134

# Submission time Handle Problem Language Result Execution time Memory
818134 2023-08-10T02:39:21 Z alvingogo Mutating DNA (IOI21_dna) C++17
100 / 100
76 ms 8436 KB
#include "dna.h"
#include <bits/stdc++.h>
#define fs first
#define sc second
#define p_q priority_queue
using namespace std;

int n;
vector<int> pre[3][3],pre2[3],pre3[3];
void init(string a, string b) {
	map<char,int> m;
	m['A']=0;
	m['C']=1;
	m['T']=2;
	n=a.length();
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			pre[i][j].resize(n);
		}
		pre2[i].resize(n);
		pre3[i].resize(n);
	}
	for(int i=0;i<n;i++){
		pre[m[a[i]]][m[b[i]]][i]++;
		pre2[m[a[i]]][i]++;
		pre3[m[b[i]]][i]++;
	}
	for(int i=1;i<n;i++){
		for(int j=0;j<3;j++){
			for(int k=0;k<3;k++){
				pre[j][k][i]+=pre[j][k][i-1];
			}
			pre2[j][i]+=pre2[j][i-1];
			pre3[j][i]+=pre3[j][i-1];
		}
	}
}

int get_distance(int x, int y) {
	int z[3][3]={0},s[3]={0};
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			z[i][j]=pre[i][j][y];
			if(x){
				z[i][j]-=pre[i][j][x-1];
			}
		}
		s[i]+=pre2[i][y];
		s[i]-=pre3[i][y];
		if(x){
			s[i]-=pre2[i][x-1];
			s[i]+=pre3[i][x-1];
		}
	}
	if(s[0] || s[1] || s[2]){
		return -1;
	}
	int ans=0;
	ans+=min(z[0][1],z[1][0]);
	ans+=min(z[0][2],z[2][0]);
	ans+=min(z[1][2],z[2][1]);
	int a=z[1][0]+z[0][1]-2*min(z[0][1],z[1][0]);
	int b=z[1][2]+z[2][1]-2*min(z[2][1],z[1][2]);
	int c=z[2][0]+z[0][2]-2*min(z[0][2],z[2][0]);
	if(a!=b || b!=c){
		return -1;
	}
	return ans+2*a;
}
# Verdict Execution time Memory Grader output
1 Correct 71 ms 7932 KB Output is correct
2 Correct 58 ms 8064 KB Output is correct
3 Correct 55 ms 7472 KB Output is correct
4 Correct 76 ms 8072 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 32 ms 6612 KB Output is correct
5 Correct 33 ms 6740 KB Output is correct
6 Correct 32 ms 6612 KB Output is correct
7 Correct 30 ms 6228 KB Output is correct
8 Correct 32 ms 6740 KB Output is correct
9 Correct 33 ms 6740 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 32 ms 6612 KB Output is correct
5 Correct 33 ms 6740 KB Output is correct
6 Correct 32 ms 6612 KB Output is correct
7 Correct 30 ms 6228 KB Output is correct
8 Correct 32 ms 6740 KB Output is correct
9 Correct 33 ms 6740 KB Output is correct
10 Correct 67 ms 7940 KB Output is correct
11 Correct 59 ms 8064 KB Output is correct
12 Correct 57 ms 7928 KB Output is correct
13 Correct 60 ms 8136 KB Output is correct
14 Correct 61 ms 8400 KB Output is correct
15 Correct 58 ms 8256 KB Output is correct
16 Correct 58 ms 7944 KB Output is correct
17 Correct 59 ms 8132 KB Output is correct
18 Correct 59 ms 8392 KB Output is correct
19 Correct 53 ms 7936 KB Output is correct
20 Correct 64 ms 8124 KB Output is correct
21 Correct 57 ms 8388 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 32 ms 6612 KB Output is correct
5 Correct 33 ms 6740 KB Output is correct
6 Correct 32 ms 6612 KB Output is correct
7 Correct 30 ms 6228 KB Output is correct
8 Correct 32 ms 6740 KB Output is correct
9 Correct 33 ms 6740 KB Output is correct
10 Correct 30 ms 6228 KB Output is correct
11 Correct 33 ms 6740 KB Output is correct
12 Correct 33 ms 6372 KB Output is correct
13 Correct 33 ms 6740 KB Output is correct
14 Correct 33 ms 6740 KB Output is correct
15 Correct 32 ms 6740 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 71 ms 7932 KB Output is correct
2 Correct 58 ms 8064 KB Output is correct
3 Correct 55 ms 7472 KB Output is correct
4 Correct 76 ms 8072 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 32 ms 6612 KB Output is correct
12 Correct 33 ms 6740 KB Output is correct
13 Correct 32 ms 6612 KB Output is correct
14 Correct 30 ms 6228 KB Output is correct
15 Correct 32 ms 6740 KB Output is correct
16 Correct 33 ms 6740 KB Output is correct
17 Correct 67 ms 7940 KB Output is correct
18 Correct 59 ms 8064 KB Output is correct
19 Correct 57 ms 7928 KB Output is correct
20 Correct 60 ms 8136 KB Output is correct
21 Correct 61 ms 8400 KB Output is correct
22 Correct 58 ms 8256 KB Output is correct
23 Correct 58 ms 7944 KB Output is correct
24 Correct 59 ms 8132 KB Output is correct
25 Correct 59 ms 8392 KB Output is correct
26 Correct 53 ms 7936 KB Output is correct
27 Correct 64 ms 8124 KB Output is correct
28 Correct 57 ms 8388 KB Output is correct
29 Correct 30 ms 6228 KB Output is correct
30 Correct 33 ms 6740 KB Output is correct
31 Correct 33 ms 6372 KB Output is correct
32 Correct 33 ms 6740 KB Output is correct
33 Correct 33 ms 6740 KB Output is correct
34 Correct 32 ms 6740 KB Output is correct
35 Correct 0 ms 212 KB Output is correct
36 Correct 58 ms 7480 KB Output is correct
37 Correct 60 ms 8004 KB Output is correct
38 Correct 58 ms 8000 KB Output is correct
39 Correct 60 ms 8388 KB Output is correct
40 Correct 61 ms 8436 KB Output is correct
41 Correct 35 ms 6740 KB Output is correct
42 Correct 57 ms 8004 KB Output is correct
43 Correct 74 ms 8388 KB Output is correct
44 Correct 60 ms 8392 KB Output is correct
45 Correct 55 ms 8028 KB Output is correct
46 Correct 61 ms 8400 KB Output is correct
47 Correct 63 ms 8388 KB Output is correct