Submission #443191

#TimeUsernameProblemLanguageResultExecution timeMemory
443191hhhhauraMutating DNA (IOI21_dna)C++17
100 / 100
62 ms7292 KiB
#include "dna.h" #define wiwihorz #include <bits/stdc++.h> #pragma GCC optimize("Ofast") #pragma loop-opt(on) #define rep(i, a, b) for(int i = a; i <= b; i ++) #define rrep(i, a, b) for(int i = b; i >= a; i--) #define all(x) x.begin(), x.end() #define ceil(a, b) ((a + b - 1) / (b)) #define INF 1000000000000000000 #define MOD 1000000007 #define eps (1e-9) using namespace std; #define ll long long int #define lld long double #define pii pair<int, int> #define random mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()) #ifdef wiwihorz #define print(a...) cerr << "Line " << __LINE__ << ": ", kout("[" + string(#a) + "] = ", a) void vprint(auto L, auto R) { while(L < R) cerr << *L << " \n"[next(L) == R], ++L;} void kout() {cerr << endl;} template<class T1, class ... T2> void kout(T1 a, T2 ... e) { cerr << a << " ", kout(e...);} #else #define print(...) 0 #define vprint(...) 0 #endif int n; vector<int> cnta[3], cntb[3], p[3], rp[3]; char c[] = {'A', 'C', 'T'}; int to_int(char cc) { rep(i, 0, 2) if(cc == c[i]) return i; return -1; } void init(string a, string b) { n = a.size(); rep(i, 0, 2) { cnta[i].assign(n + 1, 0); cntb[i].assign(n + 1, 0); p[i].assign(n + 1, 0); rp[i].assign(n + 1, 0); } rep(i, 1, n) { int ca = to_int(a[i - 1]), cb = to_int(b[i - 1]); cnta[ca][i] ++, cntb[cb][i] ++; if(ca == cb); else if(ca > cb) p[ca + cb - 1][i] ++; else rp[ca + cb - 1][i] ++; rep(j, 0, 2) { cnta[j][i] += cnta[j][i - 1]; cntb[j][i] += cntb[j][i - 1]; p[j][i] += p[j][i - 1]; rp[j][i] += rp[j][i - 1]; } } return; } int get_distance(int x, int y) { x++, y++; rep(i, 0, 2) if(cnta[i][y] - cnta[i][x - 1] != cntb[i][y] - cntb[i][x - 1]) { return -1; } int ans = 0, odd; rep(i, 0, 2) { int pos = p[i][y] - p[i][x - 1]; int neg = rp[i][y] - rp[i][x - 1]; odd = abs(pos - neg); ans += min(pos, neg); } ans += odd * 2; return ans; }

Compilation message (stderr)

dna.cpp:5: warning: ignoring '#pragma loop ' [-Wunknown-pragmas]
    5 | #pragma loop-opt(on)
      | 
dna.cpp:25:13: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   25 | void vprint(auto L, auto R) { while(L < R) cerr << *L << " \n"[next(L) == R], ++L;}
      |             ^~~~
dna.cpp:25:21: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   25 | void vprint(auto L, auto R) { while(L < R) cerr << *L << " \n"[next(L) == R], ++L;}
      |                     ^~~~
#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...