Submission #1223965

#TimeUsernameProblemLanguageResultExecution timeMemory
1223965CELD_07Mutating DNA (IOI21_dna)C++20
0 / 100
47 ms26176 KiB
#include "dna.h" #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> typedef long long ll; typedef long double ld; #define endl "\n" #define vll vector<ll> #define sd second #define ft first #define all(x) x.begin(),x.end() #define allr(x) x.rbegin(),x.rend() #define pll pair<ll, ll> #define mod 1000000007 #define _set tree<pll, null_type, less<pll>, rb_tree_tag, tree_order_statistics_node_update> #define inf (ll)1e15 #define db(x) cout<<#x<<" : "<<x<<endl; #define PRESICION(x) cout.setf(ios::fixed,ios::floatfield); cout.precision(x); using namespace std; using namespace __gnu_pbds; inline ll q(vector<ll>& v, ll l, ll r){ return (l==0 ? v[r] : v[r]-v[l-1]); } inline ll q1(vector<vector<vector<ll>>>& m, ll j, ll k, ll l, ll r){ return (l==0 ? m[r][j][k]: m[r][j][k]-m[l-1][j][k]); } vector<vector<vector<ll>>> m; vector<ll> a1, c1, t1, a2, c2, t2; map<char, ll> m1; void init(std::string a, std::string b){ ll n=a.size(); vector<vector<vector<ll>>>().swap(m); vector<ll>().swap(a1); vector<ll>().swap(c1); vector<ll>().swap(t1); vector<ll>().swap(a2); vector<ll>().swap(c2); vector<ll>().swap(t2); a1.assign(n+1, 0); c1.assign(n+1, 0); t1.assign(n+1, 0); a2.assign(n+1, 0); c2.assign(n+1, 0); t2.assign(n+1, 0); m.assign(n+1, vector<vector<ll>>(3, vector<ll>(3, 0))); m1['A']=0; m1['C']=1; m1['T']=2; for(int i=0; i<n; i++){ ll o=m1[a[i]], o1=m1[b[i]]; m[i][o][o1]++; if(o==0)a1[i]++; else if(o==1)c1[i]++; else t1[i]++; if(o1==0)a2[i]++; else if(o1==1)c2[i]++; else t2[i]++; } for(int i=1; i<n; i++){ a1[i]+=a1[i-1]; c1[i]+=c1[i-1]; t1[i]+=t1[i-1]; a2[i]+=a2[i-1]; c2[i]+=c2[i-1]; t2[i]+=t2[i-1]; for(int j=0; j<3; j++){ for(int k=0; k<3; k++){ m[i][j][k]=m[i-1][j][k]; } } } } int get_distance(int x, int y) { if(q(a1, x, y)!=q(a2, x, y) || q(c1, x, y)!=q(c2, x, y) || q(t1, x, y)!=q(t2, x, y))return -1; vector<ll> v2(3, 0); int res=0; for(int i=0; i<3; i++){ for(int j=i+1; j<3; j++){ v2[i]+=min(q1(m, i, j, x, y), q1(m, j, i, x, y)); v2[j]+=min(q1(m, i, j, x, y), q1(m, j, i, x, y)); res+=min(q1(m, i, j, x, y), q1(m, j, i, x, y)); } } for(int i=0; i<3; i++)v2[i]+=q1(m, i, i, x, y); res+=q(a1, x, y)-v2[0]; res+=q(c1, x, y)-v2[1]; return res; }
#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...