Submission #1161179

#TimeUsernameProblemLanguageResultExecution timeMemory
1161179kl0989eDNA 돌연변이 (IOI21_dna)C++20
100 / 100
129 ms33156 KiB
#include "dna.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define pb push_back #define vi vector<int> #define vl vector<ll> #define pi pair<int, int> #define pl pair<ll,ll> #define all(x) (x).begin(),(x).end() const int maxn=1e5+10; vector<vector<vi>> pref(maxn,vector<vi>(3,vi(3,0))); vector<vi> prefa(maxn,vi(3,0)); vector<vi> prefb(maxn,vi(3,0)); int n; map<char,int> gt={{'A',0},{'T',1},{'C',2}}; void init(string a, string b) { n=a.size(); for (int i=0; i<n; i++) { pref[i+1]=pref[i]; pref[i+1][gt[a[i]]][gt[b[i]]]++; prefa[i+1]=prefa[i]; prefa[i+1][gt[a[i]]]++; prefb[i+1]=prefb[i]; prefb[i+1][gt[b[i]]]++; } } int get_distance(int x, int y) { for (int i=0; i<3; i++) { if (prefa[y+1][i]-prefa[x][i]!=prefb[y+1][i]-prefb[x][i]) { return -1; } } int ans=0; vector<vi> temp(3,vi(3,0)); for (int i=0; i<3; i++) { for (int j=0; j<3; j++) { temp[i][j]=pref[y+1][i][j]-pref[x][i][j]; } } for (int i=0; i<3; i++) { for (int j=i+1; j<3; j++) { int t=min(temp[i][j],temp[j][i]); ans+=t; temp[i][j]-=t; temp[j][i]-=t; } } ans+=2*temp[0][1]; ans+=2*temp[1][0]; 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...