#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, 1, 2, x, y), q1(m, 2, 1, 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(t1, x, y)-v2[2];*/
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |