Submission #784810

#TimeUsernameProblemLanguageResultExecution timeMemory
784810mindiyakMutating DNA (IOI21_dna)C++17
0 / 100
52 ms9332 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; } int makeset(int a,int b){ map<int,int> tointmap = {{0,0},{1,1},{2,2},{10,3},{11,4},{12,5},{20,6},{21,7},{22,8}}; return tointmap[(a*10 + b)]; } vector<vector<int>> Counter(9); vector<vector<int>> A_counter(3),B_counter(3); int N; vector<int> A; vector<int> B; vector<int> A_B; void init(string a, string b) { vector<int>arr; N = a.size(); vector<int> _cont(9,0); vector<int> _a_cont(3,0); vector<int> _b_cont(3,0); for(int i=0;i<N;i++){ A.pb(chartoint(a[i])); B.pb(chartoint(b[i])); _cont[makeset(chartoint(a[i]),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]); } for(int j=0;j<9;j++){ Counter[j].pb(_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 get_count(vector<vector<int>> arr,int x,int y,int pos){ return (arr[pos][y]-arr[pos][x-1]); } int get_distance(int x, int y) { return -1; 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(get_count(A_counter,x,y,j) != get_count(B_counter,x,y,j)){ return -1; } } int ans = 0; vector<int> setCounter(9,0); for(int j=0;j<9;j++){ setCounter[j] = get_count(Counter,x,y,j); } setCounter[0] = 0; setCounter[4] = 0; setCounter[8] = 0; int _set = min(setCounter[1],setCounter[3]);//01,10 ans += _set; setCounter[1] -= _set; setCounter[3] -= _set; _set = min(setCounter[2],setCounter[6]);//02,20 ans += _set; setCounter[2] -= _set; setCounter[6] -= _set; _set = min(setCounter[5],setCounter[7]);//12,21 ans += _set; setCounter[5] -= _set; setCounter[7] -= _set; int remainder = 0; for(int j=0;j<9;j++){ remainder += setCounter[j]; } remainder /= 3; remainder *= 2; ans += remainder; 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...