Submission #1268800

#TimeUsernameProblemLanguageResultExecution timeMemory
1268800FaresSTHMutating DNA (IOI21_dna)C++20
100 / 100
25 ms6472 KiB
#include"bits/stdc++.h" using namespace std; using ll=long long; #define S second #define F first const char ch[]={'A','C','T'}; int id(char c){ if(c=='A')return 0; if(c=='T')return 1; return 2; } int nd[1000001][3][3],n; string a,b; void init(string A, string B){ n=A.size(); a='#'+A,b='#'+B; for(int i=1;i<=n;i++){ nd[i][id('A')][id('T')]=nd[i-1][id('A')][id('T')]; nd[i][id('A')][id('C')]=nd[i-1][id('A')][id('C')]; nd[i][id('T')][id('A')]=nd[i-1][id('T')][id('A')]; nd[i][id('T')][id('C')]=nd[i-1][id('T')][id('C')]; nd[i][id('C')][id('A')]=nd[i-1][id('C')][id('A')]; nd[i][id('C')][id('T')]=nd[i-1][id('C')][id('T')]; nd[i][id('A')][id('A')]=nd[i-1][id('A')][id('A')]; nd[i][id('C')][id('C')]=nd[i-1][id('C')][id('C')]; nd[i][id('T')][id('T')]=nd[i-1][id('T')][id('T')]; nd[i][id(a[i])][id(b[i])]++; } } int get_distance(int l, int r){ l++; r++; // convert 0-based query to 1-based prefix int f[3][3]={},frq[3]={}; for(char i:ch){ for(char j:ch){ f[id(i)][id(j)]=nd[r][id(i)][id(j)]-nd[l-1][id(i)][id(j)]; frq[id(i)]+=f[id(i)][id(j)]; frq[id(j)]-=f[id(i)][id(j)]; } } for(char i:ch)if(frq[id(i)])return -1; int res=0; for(char i:ch){ for(char j:ch){ if(j<=i)continue; int m=min(f[id(i)][id(j)],f[id(j)][id(i)]); f[id(i)][id(j)]-=m; f[id(j)][id(i)]-=m; res+=m; } } int s=0; for(char i:ch)for(char j:ch)if(i!=j)s+=f[id(i)][id(j)]; return res+2*(s/3); } // MalekLoky 3mk
#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...