제출 #1216849

#제출 시각아이디문제언어결과실행 시간메모리
1216849islam_2010DNA 돌연변이 (IOI21_dna)C++20
43 / 100
1592 ms2888 KiB
#pragma GCC optimize("O3")
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
string s, c;
const int sz = 100005;
int pref_diff[sz];

void init(string a, string b){
    s=a;
    c=b;
    pref_diff[0] = (a[0]!=b[0]);
    for(int i = 1; i < s.size(); i++){
        pref_diff[i] = pref_diff[i-1] + (a[i]!=b[i]);
    }
}

int get_distance(int x, int y){
    string ss=s.substr(x, y-x+1), cc=c.substr(x, y-x+1);
    string s2 = ss, c2=cc;
    sort(ss.begin(), ss.end());
    sort(cc.begin(), cc.end());
    if(ss!=cc){
        return -1;
    }
    if(s2==c2){
        return 0;
    }
    if(y-x<3){
        sort(ss.begin(), ss.end());
        sort(cc.begin(), cc.end());
        if(ss!=cc){
            return -1;
        }if(s2==c2){
            return 0;
        }if(y-x+1==1){
            return 0;
        }else if(y-x+1==2){
            return 1;
        }else {
            int cnt = 0;
            if(s2[0]!=c2[0]){
                cnt++;
            }if(s2[1]!=c2[1]){
                cnt++;
            }if(s2[2]!=c2[2]){
                cnt++;
            }if(cnt==2){
                return 1;
            }else {
                return 2;
            }
        }
    }else {
        int aa = pref_diff[y]-(x>0 ? pref_diff[x-1] : 0);
        
        return aa/2;
    }
    
}
#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...