Submission #437074

#TimeUsernameProblemLanguageResultExecution timeMemory
437074monsoonMutating DNA (IOI21_dna)C++17
100 / 100
44 ms6340 KiB
#include <bits/stdc++.h> #include "dna.h" using namespace std; #define REP(i,n) for(int i=0;i<(n);++i) typedef long long ll; string A, B; int n; int code[256]; struct info { int cnt[3][3]; info() { REP(a,3) REP(b,3) cnt[a][b] = 0; } }; vector<info> pref; void init(string A, string B) { code['A'] = 0; code['C'] = 1; code['T'] = 2; ::A = A; ::B = B; n = A.size(); pref.resize(n+1); REP(i,n) { REP(a,3) REP(b,3) pref[i+1].cnt[a][b] = pref[i].cnt[a][b]; pref[i+1].cnt[code[A[i]]][code[B[i]]]++; } } int get_distance(int x, int y) { info in; REP(a,3) REP(b,3) in.cnt[a][b] = pref[y+1].cnt[a][b] - pref[x].cnt[a][b]; REP(a,3) in.cnt[a][a] = 0; int ans = 0; REP(a,3) REP(b,a) { int c = min(in.cnt[a][b], in.cnt[b][a]); ans += c; in.cnt[a][b] -= c; in.cnt[b][a] -= c; } int sum[3][2]; REP(a,3) REP(w,2) sum[a][w] = 0; REP(a,3) REP(b,3) { sum[a][0] += in.cnt[a][b]; sum[b][1] += in.cnt[a][b]; } REP(a,3) if (sum[a][0] != sum[a][1]) return -1; ans += sum[0][0] * 2; return ans; }

Compilation message (stderr)

dna.cpp: In function 'void init(std::string, std::string)':
dna.cpp:32:28: warning: array subscript has type 'char' [-Wchar-subscripts]
   32 |     pref[i+1].cnt[code[A[i]]][code[B[i]]]++;
      |                            ^
dna.cpp:32:40: warning: array subscript has type 'char' [-Wchar-subscripts]
   32 |     pref[i+1].cnt[code[A[i]]][code[B[i]]]++;
      |                                        ^
#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...