제출 #1339869

#제출 시각아이디문제언어결과실행 시간메모리
1339869ElayV13DNA 돌연변이 (IOI21_dna)C++20
71 / 100
1594 ms2524 KiB
#include "dna.h"
#include "bits/stdc++.h"
using namespace std;

string A,B;

void init(string a,string b)
{
      A=a;
      B=b;
}

int get_distance(int x,int y)
{
      string sa="",sb="";
      for(int i=x;i<=y;i++) sa+=A[i];
      for(int i=x;i<=y;i++) sb+=B[i];
      vector<int>ca(3,0),cb(3,0);
      for(char c:sa)
      {
            if(c=='A') ca[0]++;
            if(c=='C') ca[1]++;
            if(c=='T') ca[2]++;
      }
      for(char c:sb)
      {
            if(c=='A') cb[0]++;
            if(c=='C') cb[1]++;
            if(c=='T') cb[2]++;
      }
      for(int i=0;i<3;i++) if(ca[i]!=cb[i]) return -1;
      int AC=0;
      int CA=0;
      int AT=0;
      int TA=0;
      int CT=0;
      int TC=0;
      for(int i=x;i<=y;i++){
            if(A[i]==B[i]) continue;
            if(B[i]=='A'&&A[i]=='C') AC++;
            if(B[i]=='C'&&A[i]=='A') CA++;
            if(B[i]=='A'&&A[i]=='T') AT++;
            if(B[i]=='T'&&A[i]=='A') TA++;
            if(B[i]=='C'&&A[i]=='T') CT++;
            if(B[i]=='T'&&A[i]=='C') TC++;
      }
      int res=0;
      int s1=min(AC,CA);
      int s2=min(AT,TA);
      int s3=min(CT,TC);
      res+=s1;
      res+=s2;
      res+=s3;
      AC-=s1;
      CA-=s1;
      AT-=s2;
      TA-=s2;
      CT-=s3;
      TC-=s3;
      int add=(AC+CA+AT+TA+CT+TC);
      return (res+((add/3)*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...