제출 #597233

#제출 시각아이디문제언어결과실행 시간메모리
597233serizeDNA 돌연변이 (IOI21_dna)C++17
56 / 100
111 ms23780 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...