Submission #1197050

#TimeUsernameProblemLanguageResultExecution timeMemory
1197050cpdreamerMutating DNA (IOI21_dna)C++20
100 / 100
22 ms5024 KiB
#include "dna.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; #define P pair #define S second #define F first #define V vector int pref1[(int)1e5+1][6]; V<P<char,char>>v2={{'A','T'},{'T','A'},{'A','C'},{'C','A'},{'T','C'},{'C','T'}}; void init(string a, string b) { a='.'+a; b='.'+b; int n=(int)a.size()-1; for (int i=1;i<=n;i++) { for (int j=0;j<6;j++) { pref1[i][j]=pref1[i-1][j]; if (a[i]==v2[j].F && b[i]==v2[j].S) { pref1[i][j]++; } } } } int get_distance(int x, int y) { y++; int ans=0; int c=0; int c1a=(pref1[y][0]+pref1[y][2]-pref1[x][0]-pref1[x][2]); int c2a=(pref1[y][1]+pref1[y][4]-pref1[x][1]-pref1[x][4]); int c3a=(pref1[y][3]+pref1[y][5]-pref1[x][3]-pref1[x][5]); int c1b=(pref1[y][1]+pref1[y][3]-pref1[x][1]-pref1[x][3]); int c2b=(pref1[y][0]+pref1[y][5]-pref1[x][0]-pref1[x][5]); int c3b=(pref1[y][2]+pref1[y][4]-pref1[x][2]-pref1[x][4]); for (int j=0,i=0;j<6;j+=2,i++) { int a=pref1[y][j]-pref1[x][j]; int b=pref1[y][j+1]-pref1[x][j+1]; ans+=min(a,b); c+=max(a,b)-min(a,b); } if ((c1b!=c1a) || (c2b!=c2a) || (c3b!=c3a)) { return -1; } ans+=(2*c)/3; 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...