#include "dna.h"
#include <string>
#include <iostream>
using namespace std;
int const NMAX = 1e5;
int freq[9][1 + NMAX];
int freqA[3][1 + NMAX];
int freqB[3][1 + NMAX];
int getVal(char ch) {
if(ch == 'A') {
return 0;
}else if(ch == 'C') {
return 1;
}else {
return 2;
}
}
void init(string a, string b) {
int n = a.size();
for(int i = 1;i <= n;i++) {
int val = getVal(a[i-1]) * 3 + getVal(b[i-1]);
for(int k = 0;k < 9;k++) {
freq[k][i] = freq[k][i-1];
}
freq[val][i]++;
for(int k = 0;k < 3;k++) {
freqA[k][i] = freqA[k][i-1];
freqB[k][i] = freqB[k][i-1];
}
freqA[getVal(a[i-1])][i]++;
freqB[getVal(b[i-1])][i]++;
}
}
int get_distance(int x, int y) {
x++;
y++;
bool isGood = true;
for(int k = 0;k < 3;k++) {
if(freqA[k][y] - freqA[k][x-1] != freqB[k][y] - freqB[k][x-1]) {
isGood = false;
}
}
if(isGood) {
int ans = 0;
int split = 0;
for(int k1 = 0;k1 < 3;k1++) {
for(int k2 = 0;k2 < k1;k2++) {
int val1 = k1 * 3 + k2, val2 = k2 * 3 + k1;
ans += min(freq[val1][y]-freq[val1][x-1], freq[val2][y]-freq[val2][x-1]);
split = max(freq[val1][y]-freq[val1][x-1], freq[val2][y]-freq[val2][x-1]) -
min(freq[val1][y]-freq[val1][x-1], freq[val2][y]-freq[val2][x-1]);
}
}
ans += split * 2;
return ans;
}
return -1;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |