| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1303996 | nekolie | Mutating DNA (IOI21_dna) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
const int M = 100001;
int ile[M][7];
void init(string a, string b) {
for (int i = 0; i < a.size(); i++) {
for (int j = 0; j < 7; j++)
ile[i+1][j] = ile[i][j];
if (a[i] == b[i])
ile[i+1][0]++;
else if (a[i] == 'A' && b[i] = 'C')
ile[i+1][1]++;
else if (a[i] == 'A' && b[i] = 'T')
ile[i+1][2]++;
else if (a[i] == 'C' && b[i] = 'A')
ile[i+1][3]++;
else if (a[i] == 'C' && b[i] = 'T')
ile[i+1][4]++;
else if (a[i] == 'T' && b[i] = 'A')
ile[i+1][5]++;
else if (a[i] == 'T' && b[i] = 'C')
ile[i+1][6]++;
}
}
int get_distance(int x, int y) {
int cnt[7], pom, odp = 0;
for (int i = 0; i < 7; i++)
cnt[i] = ile[y][i]-ile[x-1][i];
pom = min(cnt[1],cnt[3]), cnt[1] -= pom, cnt[3] -= pom, odp += pom;
pom = min(cnt[2],cnt[5]), cnt[2] -= pom, cnt[5] -= pom, odp += pom;
pom = min(cnt[4],cnt[6]), cnt[4] -= pom, cnt[6] -= pom, odp += pom;
return odp + 2*(*max_element(cnt+1,cnt+7));
}
