#include <string>
#include <iostream>
using namespace std;
const int N=1e5+100;
int pre[3][3][N];
void init(string a,string b)
{
for(int i=0;i<a.size();i++)
{
if(a[i]=='T')
a[i]='B';
if(b[i]=='T')
b[i]='B';
for(int k=0;k<3;k++)
for(int j=0;j<3;j++)
pre[k][j][i+1]=pre[k][j][i];
pre[a[i]-'A'][b[i]-'A'][i+1]++;
}
}
int get_distance(int x, int y)
{
x++;
y++;
int _00=pre[0][0][y]-pre[0][0][x-1];//
int _01=pre[0][1][y]-pre[0][1][x-1];//
int _02=pre[0][2][y]-pre[0][2][x-1];//
int _10=pre[1][0][y]-pre[1][0][x-1];//
int _11=pre[1][1][y]-pre[1][1][x-1];//
int _12=pre[1][2][y]-pre[1][2][x-1];//
int _20=pre[2][0][y]-pre[2][0][x-1];//
int _21=pre[2][1][y]-pre[2][1][x-1];//
int _22=pre[2][2][y]-pre[2][2][x-1];//
int mv=0;
int mn=min(_01,_10);
_01-=mn;
_10-=mn;
mv+=mn;
mn=min(_02,_20);
_02-=mn;
_20-=mn;
mv+=mn;
mn=min(_12,_21);
_12-=mn;
_21-=mn;
mv+=mn;
mn=min(min(_02,_21),_10);
_02-=mn;
_21-=mn;
_10-=mn;
mv+=(2*mn);
mn=min(min(_01,_20),_12);
_01-=mn;
_20-=mn;
_12-=mn;
mv+=(2*mn);
if((_01+_02+_10+_12+_20+_21)>0)
return -1;
return mv;
}
| # | 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... |