제출 #642533

#제출 시각아이디문제언어결과실행 시간메모리
642533SummersDNA 돌연변이 (IOI21_dna)C++17
100 / 100
43 ms16372 KiB
#include "dna.h"
#include<bits/stdc++.h>
using namespace std;

long long s[100002][8], pref[100002][4], pref2[100002][4];
void init(std::string a, std::string b) {

    long long i,j;
    for(i=0;i<a.size();i++)
    {
        if(a[i]=='A' && b[i]=='T')s[i][1]++;
        if(a[i]=='T' && b[i]=='A')s[i][2]++;
        if(a[i]=='C' && b[i]=='T')s[i][3]++;
        if(a[i]=='T' && b[i]=='C')s[i][4]++;
        if(a[i]=='A' && b[i]=='C')s[i][5]++;
        if(a[i]=='C' && b[i]=='A')s[i][6]++;

        if(i!=0)for(j=1;j<=6;j++)s[i][j]+=s[i-1][j];

        if(a[i]=='A')pref[i][1]++;
        if(a[i]=='T')pref[i][2]++;
        if(a[i]=='C')pref[i][3]++;

        if(i!=0)for(j=1;j<=3;j++)pref[i][j]+=pref[i-1][j];

        if(b[i]=='A')pref2[i][1]++;
        if(b[i]=='T')pref2[i][2]++;
        if(b[i]=='C')pref2[i][3]++;

        if(i!=0)for(j=1;j<=3;j++)pref2[i][j]+=pref2[i-1][j];
    }
}

int get_distance(int x, int y) {


    long long A=pref[y][1], A2=pref2[y][1];
    if(x>0){A-=pref[x-1][1]; A2-=pref2[x-1][1];}

    long long B=pref[y][2], B2=pref2[y][2];
    if(x>0){B-=pref[x-1][2]; B2-=pref2[x-1][2];}

    long long C=pref[y][3], C2=pref2[y][3];
    if(x>0){C-=pref[x-1][3]; C2-=pref2[x-1][3];}

    if((A!=A2) || (B!=B2 )||(C!=C2))return -1;

    long long AT = s[y][1]-(x>0?s[x-1][1]:0);
    long long TA = s[y][2]-(x>0?s[x-1][2]:0);
    long long CT = s[y][3]-(x>0?s[x-1][3]:0);
    long long TC = s[y][4]-(x>0?s[x-1][4]:0);
    long long AC = s[y][5]-(x>0?s[x-1][5]:0);
    long long CA = s[y][6]-(x>0?s[x-1][6]:0);

   long long ans=0;

   ans+=min(AT,TA)+min(CT,TC)+min(AC,CA);

   AT-=TA;
   if(AT<0)AT=-AT;

   ans+=2*AT;

   return ans;

}

컴파일 시 표준 에러 (stderr) 메시지

dna.cpp: In function 'void init(std::string, std::string)':
dna.cpp:9:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 |     for(i=0;i<a.size();i++)
      |             ~^~~~~~~~~
#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...