This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<iostream>
#include<map>
using namespace std;
map<char,int> rodzaj;
int x0[200000][3];
int y0[200000][3];
int roz01[100010];
int roz10[100010];
int roz02[100010];
int roz20[100010];
int roz12[100010];
int roz21[100010];
void init(string x,string y)
{
rodzaj['A']=0;
rodzaj['C']=1;
rodzaj['T']=2;
for(int i=0;i<x.length();i++)
{
x0[i+1][0]=x0[i][0];
x0[i+1][1]=x0[i][1];
x0[i+1][2]=x0[i][2];
x0[i+1][rodzaj[x[i]]]++;
}
for(int i=0;i<y.length();i++)
{
y0[i+1][0]=y0[i][0];
y0[i+1][1]=y0[i][1];
y0[i+1][2]=y0[i][2];
y0[i+1][rodzaj[y[i]]]++;
}
for(int i=0;i<x.length();i++)
{
roz01[i+1]=roz01[i];
roz02[i+1]=roz02[i];
roz10[i+1]=roz10[i];
roz12[i+1]=roz12[i];
roz20[i+1]=roz20[i];
roz21[i+1]=roz21[i];
if(x[i]==y[i])
continue;
if(x[i]=='A' && y[i]=='C')
roz01[i+1]++;
if(x[i]=='C' && y[i]=='A')
roz10[i+1]++;
if(x[i]=='A' && y[i]=='T')
roz02[i+1]++;
if(x[i]=='T' && y[i]=='A')
roz20[i+1]++;
if(x[i]=='C' && y[i]=='T')
roz12[i+1]++;
if(x[i]=='T' && y[i]=='C')
roz21[i+1]++;
}
}
int get_distance(int x,int y)
{
for(int i=0;i<3;i++)
if(x0[y+1][i]-x0[x][i]!=y0[y+1][i]-y0[x][i])
return -1;
int wynik=0;
int ile_01=roz01[y+1]-roz01[x];
int ile_02=roz02[y+1]-roz02[x];
int ile_12=roz12[y+1]-roz12[x];
int ile_10=roz10[y+1]-roz10[x];
int ile_20=roz20[y+1]-roz20[x];
int ile_21=roz21[y+1]-roz21[x];
wynik+=min(ile_01,ile_10)+min(ile_02,ile_20)+min(ile_12,ile_21);
ile_01=max(ile_01,ile_10)-min(ile_01,ile_10);
ile_02=max(ile_02,ile_20)-min(ile_02,ile_20);
ile_12=max(ile_12,ile_21)-min(ile_12,ile_21);
wynik+=((ile_01+ile_02+ile_12)/3)*2;
return wynik;
}
Compilation message (stderr)
dna.cpp: In function 'void init(std::string, std::string)':
dna.cpp:18:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
18 | for(int i=0;i<x.length();i++)
| ~^~~~~~~~~~~
dna.cpp:25:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
25 | for(int i=0;i<y.length();i++)
| ~^~~~~~~~~~~
dna.cpp:32:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
32 | for(int i=0;i<x.length();i++)
| ~^~~~~~~~~~~
# | 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... |