Submission #784752

#TimeUsernameProblemLanguageResultExecution timeMemory
784752mindiyakMutating DNA (IOI21_dna)C++17
21 / 100
39 ms6876 KiB
#include "dna.h" #include <vector> #include <algorithm> #include <set> #include <bits/stdc++.h> #define pb push_back using namespace std; int chartoint(char a){ if(a == 'A'){ return 0; }if(a == 'C'){ return 1; } return 2; } vector<vector<int>> A_counter,B_counter; int N; vector<int> A; vector<int> B; void init(string a, string b) { vector<int>arr; for(int i=0;i<3;i++){ A_counter.pb(arr); B_counter.pb(arr); } N = a.size(); vector<int> _a_cont = {0,0,0}; vector<int> _b_cont = {0,0,0}; for(int i=0;i<N;i++){ A.pb(chartoint(a[i])); B.pb(chartoint(b[i])); _a_cont[chartoint(a[i])]++; _b_cont[chartoint(b[i])]++; for(int j=0;j<3;j++){ A_counter[j].pb(_a_cont[j]); B_counter[j].pb(_b_cont[j]); } } // cout << "A " << endl; // for(int i=0;i<N;i++){ // cout << i << " -> "; // for(int j=0;j<3;j++){ // cout << A_counter[j][i] << " "; // }cout << endl; // } // cout << "B " << endl; // for(int i=0;i<N;i++){ // cout << i << " -> "; // for(int j=0;j<3;j++){ // cout << B_counter[j][i] << " "; // }cout << endl; // } // cout << endl; } int makeset(int a,int b){ return (a*10 + b); } int get_distance(int x, int y) { for(int j=0;j<3;j++){ // cout << j << " " << (A_counter[j][y]-A_counter[j][x-1]) << " " << (B_counter[j][y]-B_counter[j][x-1]) << endl; if((A_counter[j][y]-A_counter[j][x-1]) != (B_counter[j][y]-B_counter[j][x-1])){ return -1; } } int ans = 0; vector<int> prev(25,0); for(int i=x;i<=y;i++){ if(A[i] == B[i]){ continue; } if(prev[makeset(A[i],B[i])] > 0){ prev[makeset(A[i],B[i])]--; continue; } prev[makeset(B[i],A[i])]++; ans += 1; } if(ans > 1){ ans --; } return ans; }
#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...