#include <bits/stdc++.h>
#include "dna.h"
using namespace std;
string A,B;
vector<int> a_T,a_A,b_T,b_A,diff;
void init(std::string a, std::string b) {
A = a;
B = b;
a_A.resize(A.size()+1,0);
b_A.resize(A.size()+1,0);
b_T.resize(A.size()+1,0);
a_T.resize(A.size()+1,0);
diff.resize(A.size()+1,0);
for(int i=0;i<A.size();++i)
{
a_A[i+1]+=a_A[i];
a_T[i+1]+=a_T[i];
b_A[i+1]+=b_A[i];
b_T[i+1]+=b_T[i];
diff[i+1]+=diff[i];
if(A[i] == 'A')
++a_A[i+1];
else
++a_T[i+1];
if(B[i] == 'A')
++b_A[i+1];
else
++b_T[i+1];
if(A[i] != B[i])
{
++diff[i+1];
}
}
}
bool check()
{
return count(A.begin(),A.end(),'C') + count(B.begin(),B.end(),'C') > 0;
}
int get_distance(int x, int y) {
if(y - x <=2 && check())
{
if(y - x == 0)
{
if(A[x] == B[x])
return 0;
else
return -1;
}
else if(y - x == 1)
{
if((A[x] == B[x] && A[x+1] == B[x+1]))
return 0;
if((A[x] == B[x+1] && A[x+1] == B[x]))
return 1;
return -1;
}
else
{
int a=0,b=0,c=0;
for(int i=x;i<=y;++i)
{
if(A[i] == 'A')
++a;
else if(A[i] == 'T')
++b;
else
++c;
}
int d=0,e=0,f=0;
for(int i=x;i<=y;++i)
{
if(B[i] == 'A')
++d;
else if(B[i] == 'T')
++e;
else
++f;
}
if(a!=d || e!=b || f!=c)
{
return -1;
}
int diff1 = 0;
for(int i=x;i<=y;++i)
{
if(A[i]!=B[i])
++diff1;
}
if(diff1 == 1)
return -1;
else
{
if(diff1 & 1)
return 2;
else
return diff1/2;
}
}
}
else
{
int at = a_T[y+1] - a_T[x];
int aa = a_A[y+1] - a_A[x];
int bt = b_T[y+1] - b_T[x];
int ba = b_A[y+1] - b_A[x];
int difff = diff[y+1] - diff[x];
if(difff & 1)
return -1;
if(at != bt || aa != ba)
return -1;
return difff / 2;
}
}
# | 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... |