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<bits/stdc++.h>
using namespace std;
int cvt(char c) {
if (c=='A') return 0;
if (c=='C') return 1;
return 2;
}
int srg[3][3][150000];
void init(string a, string b) {
int n=a.length();
for (int i=0;i<3;i++) {
for (int j=0;j<3;j++) {
srg[i][j][0] = 0;
}
}
for (int i=0;i<3;i++) {
for (int j=0;j<3;j++) {
for (int k=0;k<n;k++) srg[i][j][k+1] = srg[i][j][k] + (i==cvt(a[k]))*(j==cvt(b[k]));
}
}
}
int get_distance(int x, int y) {
int bs[3][3];
for (int i=0;i<3;i++) {
for (int j=0;j<3;j++) {
bs[i][j] = srg[i][j][y+1] - srg[i][j][x];
}
}
int ans = 0;
int m;
m=min(bs[0][1],bs[1][0]);bs[0][1]-=m;bs[1][0]-=m;ans+=m;
m=min(bs[0][2],bs[2][0]);bs[0][2]-=m;bs[2][0]-=m;ans+=m;
m=min(bs[2][1],bs[1][2]);bs[2][1]-=m;bs[1][2]-=m;ans+=m;
int r = bs[0][1];
if (r!=bs[1][2]) return -1;
if (r!=bs[2][0]) return -1;
ans+=r*2;
int s = bs[0][2];
if (s!=bs[2][1]) return -1;
if (s!=bs[1][0]) return -1;
ans+=s*2;
return ans;
}
# | 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... |