이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "dna.h"
#include <bits/stdc++.h>
#include <cstdio>
#include <cassert>
#include <string>
#include <vector>
#define all(x) x.begin(),x.end()
using namespace std;
const int MAX = 1e5+2;
vector<int> dif(MAX);
string s1, s2;
int mat_s1[30][MAX], mat_s2[30][MAX];
void init(std::string a, std::string b) {
int n = a.size();
for(auto i: a){
int x = (int)(i);
x += 32;
s1.push_back( (char)(x) );
}
for(auto i: b){
int x = (int)(i);
x += 32;
s2.push_back( (char)(x) );
}
for(int i = 1; i <= n; i++){
dif[i] = (a[i-1]!=b[i-1])?1:0;
dif[i] += dif[i-1];
char x = s1[i-1], y = s2[i-1];
mat_s1[ (int)(x-'a') ][i] = 1;
mat_s2[ (int)(y-'a') ][i] = 1;
}
for(char i = 'a'; i <= 'z'; i++){
int abc = (int)(i-'a');
for(int j = 1; j <= n; j++){
mat_s1[abc][j] += mat_s1[abc][j-1];
mat_s2[abc][j] += mat_s2[abc][j-1];
}
}
}
int get_distance(int x, int y) {
if(y-x == 0){
if(s1[x] != s2[x]) return -1;
else return 0;
}
else{
bool ok = 1;
for(char i = 'a'; i <= 'z'; i++){
int abc = (int)(i-'a');
int cnt1 = (mat_s1[abc][y+1]-mat_s1[abc][x]);
int cnt2 = (mat_s2[abc][y+1]-mat_s2[abc][x]);
if(cnt1 != cnt2) ok = 0;
}
if(ok == false) return -1;
int d = dif[y+1]-dif[x];
if(d&1) return ( (d>>1)+1 );
else return (d>>1);
}
return 0;
}
# | 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... |