#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
const char ch[] = {'A', 'T', 'C'};
int n, m, k;
string ADN[6];
vector<vector<int>> prefix;
vector<vector<int>> sumA, sumB;
void init(string a, string b) {
n = a.size();
m = 6; k = 3;
ADN[0] = "AT";
ADN[1] = "AC";
ADN[2] = "TC";
ADN[3] = "CT";
ADN[4] = "CA";
ADN[5] = "TA";
prefix.resize(n, vector<int> (m, 0));
sumA.resize(n, vector<int> (k, 0));
sumB.resize(n, vector<int> (k, 0));
for(int i = 0; i < n; i ++) {
string s = "";
s.push_back(a[i]);
s.push_back(b[i]);
for(int j = 0; j < m; j ++) {
prefix[i][j] = (i > 0 ? prefix[i - 1][j] : 0) + (s == ADN[j]);
}
}
for(int i = 0; i < n; i ++) {
for(int j = 0; j < k; j ++) {
sumA[i][j] = (i > 0 ? sumA[i - 1][j] : 0) + (a[i] == ch[j]);
sumB[i][j] = (i > 0 ? sumB[i - 1][j] : 0) + (b[i] == ch[j]);
}
}
}
int get_distance(int x, int y) {
for(int i = 0; i < k; i ++) {
int sA = sumA[y][i] - (x > 0 ? sumA[x - 1][i] : 0);
int sB = sumB[y][i] - (x > 0 ? sumB[x - 1][i] : 0);
if(sA != sB) return -1;
}
vector<int> dp(m, 0);
auto get = [&](int l, int r, int i) {
return prefix[r][i] - (l > 0 ? prefix[l - 1][i] : 0);
};
for(int i = 0; i < m; i ++) dp[i] = get(x, y, i);
int total = 0;
for(int i = 0; i < m; i ++) {
int j = m - 1 - i;
int v = min(dp[i], dp[j]);
dp[i] -= v;
dp[j] -= v;
total += v;
}
for(int i = 0; i < m; i ++) {
if(dp[i] == 0) continue ;
for(int j = 0; j < m; j ++) {
if(dp[j] == 0) continue ;
if(ADN[i][1] == ADN[j][0]) {
total += dp[i] * 2;
return total;
}
}
}
return total;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
57 ms |
19840 KB |
Output is correct |
2 |
Correct |
52 ms |
20056 KB |
Output is correct |
3 |
Correct |
54 ms |
18512 KB |
Output is correct |
4 |
Correct |
57 ms |
20224 KB |
Output is correct |
5 |
Correct |
0 ms |
344 KB |
Output is correct |
6 |
Correct |
1 ms |
344 KB |
Output is correct |
7 |
Correct |
1 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
504 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
17 ms |
17244 KB |
Output is correct |
5 |
Correct |
17 ms |
17500 KB |
Output is correct |
6 |
Correct |
18 ms |
17496 KB |
Output is correct |
7 |
Correct |
17 ms |
16472 KB |
Output is correct |
8 |
Correct |
18 ms |
17496 KB |
Output is correct |
9 |
Correct |
17 ms |
17496 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
504 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
17 ms |
17244 KB |
Output is correct |
5 |
Correct |
17 ms |
17500 KB |
Output is correct |
6 |
Correct |
18 ms |
17496 KB |
Output is correct |
7 |
Correct |
17 ms |
16472 KB |
Output is correct |
8 |
Correct |
18 ms |
17496 KB |
Output is correct |
9 |
Correct |
17 ms |
17496 KB |
Output is correct |
10 |
Correct |
52 ms |
19792 KB |
Output is correct |
11 |
Correct |
53 ms |
20048 KB |
Output is correct |
12 |
Correct |
54 ms |
19280 KB |
Output is correct |
13 |
Correct |
61 ms |
19536 KB |
Output is correct |
14 |
Correct |
64 ms |
20304 KB |
Output is correct |
15 |
Correct |
72 ms |
20464 KB |
Output is correct |
16 |
Correct |
50 ms |
19024 KB |
Output is correct |
17 |
Correct |
53 ms |
19536 KB |
Output is correct |
18 |
Correct |
63 ms |
20304 KB |
Output is correct |
19 |
Correct |
50 ms |
19096 KB |
Output is correct |
20 |
Correct |
45 ms |
19548 KB |
Output is correct |
21 |
Correct |
49 ms |
20304 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
504 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
17 ms |
17244 KB |
Output is correct |
5 |
Correct |
17 ms |
17500 KB |
Output is correct |
6 |
Correct |
18 ms |
17496 KB |
Output is correct |
7 |
Correct |
17 ms |
16472 KB |
Output is correct |
8 |
Correct |
18 ms |
17496 KB |
Output is correct |
9 |
Correct |
17 ms |
17496 KB |
Output is correct |
10 |
Correct |
16 ms |
15960 KB |
Output is correct |
11 |
Correct |
17 ms |
17496 KB |
Output is correct |
12 |
Correct |
18 ms |
16480 KB |
Output is correct |
13 |
Correct |
19 ms |
17496 KB |
Output is correct |
14 |
Correct |
18 ms |
17496 KB |
Output is correct |
15 |
Correct |
17 ms |
17488 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
57 ms |
19840 KB |
Output is correct |
2 |
Correct |
52 ms |
20056 KB |
Output is correct |
3 |
Correct |
54 ms |
18512 KB |
Output is correct |
4 |
Correct |
57 ms |
20224 KB |
Output is correct |
5 |
Correct |
0 ms |
344 KB |
Output is correct |
6 |
Correct |
1 ms |
344 KB |
Output is correct |
7 |
Correct |
1 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
344 KB |
Output is correct |
9 |
Correct |
1 ms |
504 KB |
Output is correct |
10 |
Correct |
0 ms |
344 KB |
Output is correct |
11 |
Correct |
17 ms |
17244 KB |
Output is correct |
12 |
Correct |
17 ms |
17500 KB |
Output is correct |
13 |
Correct |
18 ms |
17496 KB |
Output is correct |
14 |
Correct |
17 ms |
16472 KB |
Output is correct |
15 |
Correct |
18 ms |
17496 KB |
Output is correct |
16 |
Correct |
17 ms |
17496 KB |
Output is correct |
17 |
Correct |
52 ms |
19792 KB |
Output is correct |
18 |
Correct |
53 ms |
20048 KB |
Output is correct |
19 |
Correct |
54 ms |
19280 KB |
Output is correct |
20 |
Correct |
61 ms |
19536 KB |
Output is correct |
21 |
Correct |
64 ms |
20304 KB |
Output is correct |
22 |
Correct |
72 ms |
20464 KB |
Output is correct |
23 |
Correct |
50 ms |
19024 KB |
Output is correct |
24 |
Correct |
53 ms |
19536 KB |
Output is correct |
25 |
Correct |
63 ms |
20304 KB |
Output is correct |
26 |
Correct |
50 ms |
19096 KB |
Output is correct |
27 |
Correct |
45 ms |
19548 KB |
Output is correct |
28 |
Correct |
49 ms |
20304 KB |
Output is correct |
29 |
Correct |
16 ms |
15960 KB |
Output is correct |
30 |
Correct |
17 ms |
17496 KB |
Output is correct |
31 |
Correct |
18 ms |
16480 KB |
Output is correct |
32 |
Correct |
19 ms |
17496 KB |
Output is correct |
33 |
Correct |
18 ms |
17496 KB |
Output is correct |
34 |
Correct |
17 ms |
17488 KB |
Output is correct |
35 |
Correct |
0 ms |
344 KB |
Output is correct |
36 |
Correct |
59 ms |
18440 KB |
Output is correct |
37 |
Correct |
56 ms |
20048 KB |
Output is correct |
38 |
Correct |
76 ms |
19280 KB |
Output is correct |
39 |
Correct |
65 ms |
20480 KB |
Output is correct |
40 |
Correct |
68 ms |
20304 KB |
Output is correct |
41 |
Correct |
22 ms |
17496 KB |
Output is correct |
42 |
Correct |
51 ms |
19280 KB |
Output is correct |
43 |
Correct |
56 ms |
20440 KB |
Output is correct |
44 |
Correct |
68 ms |
20392 KB |
Output is correct |
45 |
Correct |
46 ms |
19280 KB |
Output is correct |
46 |
Correct |
47 ms |
20304 KB |
Output is correct |
47 |
Correct |
44 ms |
20304 KB |
Output is correct |