제출 #1000045

#제출 시각아이디문제언어결과실행 시간메모리
1000045codefoxDNA 돌연변이 (IOI21_dna)C++17
35 / 100
34 ms4900 KiB
#include<bits/stdc++.h> #include "dna.h" using namespace std; vector<int> AC; vector<int> AT; vector<int> CA; vector<int> CT; vector<int> TA; vector<int> TC; void init(string a, string b) { int n = a.size(); AC.assign(n+1, 0); AT.assign(n+1, 0); CA.assign(n+1, 0); CT.assign(n+1, 0); TA.assign(n+1, 0); TC.assign(n+1, 0); for (int i = 0; i < n; i++) { AC[i+1] = AC[i]; AT[i+1] = AT[i]; CA[i+1] = CA[i]; CT[i+1] = CT[i]; TA[i+1] = TA[i]; TC[i+1] = TC[i]; if (a[i]=='A') { if (b[i]=='C') AC[i+1]++; if (b[i]=='T') AT[i+1]++; } if (a[i]=='C') { if (b[i]=='A') CA[i+1]++; if (b[i]=='T') CT[i+1]++; } if (a[i]=='T') { if (b[i]=='A') TA[i+1]++; if (b[i]=='C') TC[i+1]++; } } } int get_distance(int y, int x) { int sol = 0; int ac = AC[x+1]-AC[y]; int at = AT[x+1]-AT[y]; int ca = CA[x+1]-CA[y]; int ct = CT[x+1]-CT[y]; int ta = TA[x+1]-TA[y]; int tc = TC[x+1]-TC[y]; if (ac+at != ta+ca) return -1; if (ca+ct != tc+ac) return -1; if (ta+tc != at+ct) return -1; sol += min(ac, ca) +min(at, ta) + min(ct, tc); ac -= min(ac, ca); at -= min(at, ta); ca -= min(ac, ca); ct -= min(tc, ct); ta -= min(at, ta); tc -= min(tc, ct); vector<int> nn; if (ac != 0) nn.push_back(ac); if (at != 0) nn.push_back(at); if (ca != 0) nn.push_back(ca); if (ct != 0) nn.push_back(ct); if (ta != 0) nn.push_back(ta); if (tc != 0) nn.push_back(tc); //if (nn.size() > 2) sol += 2*nn[0]; return sol; }
#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...