제출 #1231312

#제출 시각아이디문제언어결과실행 시간메모리
1231312coco2311DNA 돌연변이 (IOI21_dna)C++17
0 / 100
25 ms2304 KiB
#include "dna.h"
#include <iostream>
#include <string>
#include <stack>
using namespace std;

int N;
char a[100001],b[100001];

void init(string a2, string b2){
    N=a2.size();
    for(int i=0;i<N;i++){
        a[i]=a2[i];
        b[i]=b2[i];
    }
}

int get_distance(int x,int y){
    int a1[3]={0},b1[3]={0};
    for(int i=x;i<=y;i++){
        if(a[i]=='A'){
            a1[0]++;
        }
        else if(a[i]=='C'){
            a1[1]++;
        }
        else{
            a1[2]++;
        }
        if(b[i]=='A'){
            b1[0]++;
        }
        else if(a[i]=='C'){
            b1[1]++;
        }
        else{
            b1[2]++;
        }
    }
    for(int i=0;i<3;i++){
        if(a1[i]!=b1[i]){
            return -1;
        }
    }
    stack<int> wa,wc,wt; //index of wrong letter
    for(int i=y;i>=x;i--){
        if(a[i]==b[i])continue;
        if(b[i]=='A'){
            wa.push(i);
        }
        else if(b[i]=='C'){
            wc.push(i);
        }
        else{
            wt.push(i);
        }
    }
    int d=0;
    for(int i=x;i<=y;i++){
        if(a[i]==b[i])continue;
        d++;
        if(a[i]=='A'){
            b[wa.top()]=b[i];
            wa.pop();
        }
        else if(a[i]=='C'){
            b[wc.top()]=b[i];
            wc.pop();
        }
        else{
            b[wt.top()]=b[i];
            wt.pop();
        }

        if(b[i]=='A'){
            wa.pop();
        }
        else if(b[i]=='C'){
            wc.pop();
        }
        else{
            wt.pop();
        }

    }
    return d;
}
#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...