# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
790982 | ALeonidou | DNA 돌연변이 (IOI21_dna) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <iomanip>
#include <cmath>
#include <bitset>
#include <string>
#include <fstream>
#include <cstring>
using namespace std;
#define ll long long
#define llu unsigned long long
#define ld long double
#define F first
#define S second
#define endl "\n"
#define MID ((l+r)/2)
#define sorv(a) sort(a.begin(),a.end())
#define revv(a) reverse(a.begin(),a.end())
#define all(x) (x).begin(),(x).end()
#define sz(x) (ll)(x).size()
#define ins insert
#define pb push_back
#define inf 1e9
#define INF 1e18
#define MOD 1000000007
#define MOD2 998244353
typedef pair <ll, ll> ii;
typedef pair <ll,ii> iii;
typedef vector <ll> vi;
typedef vector <ii> vii;
typedef vector <iii> viii;
typedef set <ll> si;
typedef map <ll,ll> mi;
#ifndef ONLINE_JUDGE
//#define ONLINE_JUDGE
#endif
#ifndef ONLINE_JUDGE
template<typename T>void printArr(T *arr,ll l,ll m=0){if(m==1){for(ll i=0;i<l;i++)cout<<arr[i]<<" ";cout<<endl;}else{cout<<endl;for(ll i=0;i<l;i++)cout<<i<<": "<<arr[i]<<endl;}}
#define printArr2D(arr,n,m)cout<<endl;for(ll i=0;i<n;i++){for(ll j=0;j<m;j++)cout<<arr[i][j]<<" ";cout<<endl;}cout<<endl;
template<typename T>void printVct(vector<T> v,ll m=0){if(m==1){for(ll i=0;i<sz(v);i++)cout<<v[i]<<" ";cout<<endl;}else{cout<<endl;for(ll i=0; i<sz(v);i++)cout<<i<<": "<<v[i]<<endl;}}
template<typename T>void printVct2D(vector<vector<T> >v){cout<<endl;for(ll i=0;i<sz(v);i++){cout<<i<<": ";for(ll j=0;j<sz(v[i]);j++)cout<<v[i][j]<<" ";cout<<endl;}}
template<typename T>void printVctPair(vector<T> v,ll m=0){if(m==1){for(ll i=0;i<sz(v);i++)cout<<v[i].F<<":"<<v[i].S<<" ";cout<<endl;}else{cout<<endl;for(ll i=0;i<sz(v);i++)cout<<i<<": "<<v[i].F<<" : "<<v[i].S<<endl;}}
template<typename T>void printVctPair2D(vector<vector<T> >v){cout<<endl;for(ll i=0;i<sz(v);i++){cout<<i<<": ";for(ll j=0;j<sz(v[i]);j++)cout<<v[i][j].F<<":"<<v[i][j].S<<" ";cout<<endl;}}
template<typename T>void printVctPair3(vector<T> v,ll m=0){cout<<endl;for(ll i=0;i<sz(v);i++)cout<<i<<": ("<<v[i].F<<" : "<<v[i].S.F<<" : "<<v[i].S.S<<")"<<endl;}
template<typename T1,typename T2>void printMap(map<T1,T2>mp){cout<<endl;for(typename map<T1,T2>::iterator it=mp.begin();it!=mp.end();it++)cout<<it->F<<" -> "<<it->S<<endl;}
template<typename T>void printSet(set<T>st,ll m=0){typename set<T>::iterator it;if(m){for(it=st.begin();it!=st.end();it++)cout<<*it<<" ";cout<<endl;}else{cout<<endl;for(it=st.begin();it!=st.end();it++)cout<<*it<<endl;}}
void check(ll n){cout<<"CHECKPOINT "<<n<<"\n\n";}
#define dbg(x) cout<<#x<<":"<<x<<endl
#define dbg2(x,y) cout<<#x<<":"<<x<<" "<<#y<<":"<<y<<endl
#define dbg3(x,y,z) cout<<#x<<":"<<x<<" "<<#y<<":"<<y<<" "<<#z<<":"<<z<<endl
#define dbg4(x,y,z,w) cout<<#x<<":"<<x<<" "<<#y<<":"<<y<<" "<<#z<<":"<<z<<" "<<#w<<":"<<w<<endl
#define dbg5(x,y,z,w,v) cout<<#x<<":"<<x<<" "<<#y<<":"<<y<<" "<<#z<<":"<<z<<" "<<#w<<":"<<w<<" "<<#v<<":"<<v<<endl
#define dbg6(x,y,z,w,v,u) cout<<#x<<":"<<x<<" "<<#y<<":"<<y<<" "<<#z<<":"<<z<<" "<<#w<<":"<<w<<" "<<#v<<":"<<v<<" "<<#u<<":"<<u<<endl
#define dbgp(x) cout<<#x<<":("<<x.F<<" "<<x.S<<")"<<endl
#define dbgp2(x,y) cout<<#x<<":("<<x.F<<","<<x.S<<") "<<#y<<":("<<y.F<<","<<y.S<<")"<<endl
#define dbgt(x) cout<<#x<<":("<<x.F<<" "<<x.S.F<<" "<<x.S.S<<")"<<endl
#define dbgt2(x,y) cout<<#x<<":("<<x.F<<" "<<x.S.F<<" "<<x.S.S<<") "<<#y<<":("<<y.F<<" "<<y.S.F<<" "<<y.S.S<<")"<<endl
#else
template<typename T>void printArr(T *arr,ll l,ll m=0){}
#define printArr2D(arr,n,m)
template<typename T>void printVct(vector<T> v,ll m=0){}
template<typename T>void printVct2D(vector<vector<T> >v){}
template<typename T>void printVctPair(vector<T> v,ll m=0){}
template<typename T>void printVctPair2D(vector<vector<T> >v){}
template<typename T>void printVctPair3(vector<T> v,ll m=0){}
template<typename T1,typename T2>void printMap(map<T1,T2>mp){}
template<typename T>void printSet(set<T>st,ll m=0){}
void check(ll n){}
#define dbg(x)
#define dbg2(x,y)
#define dbg3(x,y,z)
#define dbg4(x,y,z,w)
#define dbg5(x,y,z,w,v)
#define dbg6(x,y,z,w,v,u)
#define dbgp(x)
#define dbgp2(x,y)
#define dbgt(x)
#define dbgt2(x,y)
#endif
const ll dx[8]={1,-1,0,0,1,1,-1,-1}, dy[8]={0,0,1,-1,1,-1,1,-1};
ll charToIntNum(char c){return (ll)c-48;}
char intToCharNum(ll n){return (char)n+48;}
ll charToIntLower(char c){return (ll)c-97;}
char intToCharLower(ll n){return (char)n+97;}
ll charToIntUpper(char c){return (ll)c-65;}
char intToCharUpper(ll n){return (char)n+65;}
void tabb(ll n){for(ll i=0;i<n;i++)cout<<"\t";}
ll gcd(ll x,ll y){if(y==0)return x;return gcd(y,x%y);}
void yesno(bool a){if(a){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}
#define N 100000
string s[2];
ll s_A[N+1][2], s_C[N+1][2], s_T[N+1][2];
ll s_pos[N+1];
void init(string x, string y){
s[0] = x;
s[1] = y;
ll n= sz(x);
for (ll i=0;i<2; i++){
s_A[0][i] = 0;
for (ll j = 0; j<n; j++)
s_A[j+1][i] = s_A[j][i] + (s[i][j] == 'A') ;
s_C[0][i] = 0;
for (ll j = 0; j<n; j++)
s_C[j+1][i] = s_C[j][i] + (s[i][j] == 'C') ;
s_T[0][i] = 0;
for (ll j = 0; j<n; j++)
s_T[j+1][i] = s_T[j][i] + (s[i][j] == 'T') ;
}
s_pos[0] = 0;
for (ll i=0; i<n; i++){
s_pos[i+1] += s_pos[i] + (s[0][i] != s[1][i]);
}
}
bool ok(ll x, ll y){
x++,y++;
bool a = ((s_A[y][0] - s_A[x-1][0]) == (s_A[y][1] - s_A[x-1][1]));
bool c = ((s_C[y][0] - s_C[x-1][0]) == (s_C[y][1] - s_C[x-1][1]));
bool g = ((s_T[y][0] - s_T[x-1][0]) == (s_T[y][1] - s_T[x-1][1]));
return (a & c & g);
}
ll countMisplaced(ll x, ll y){
x++, y++;
return s_pos[y] - s_pos[x-1];
}
ll get_distance(ll x, ll y){
if (!ok(x,y)) return -1;
ll wrong = countMisplaced(x,y);
if (wrong == 2) return 1;
if (wrong == 3) return 2;
return 0;
}
// int main(){
// ios_base::sync_with_stdio(0);
// cin.tie(0); cout.tie(0);
// init("ATACAT", "ACTATA");
// dbg(get_distance(1,3));
// dbg(get_distance(4,5));
// dbg(get_distance(3,5));
// return 0;
// }
/*
*/