Submission #730069

#TimeUsernameProblemLanguageResultExecution timeMemory
730069lucriMutating DNA (IOI21_dna)C++17
100 / 100
45 ms23432 KiB
#include "dna.h"
#include <cstdio>
#include <cassert>
#include <string>
#include <vector>

int nr[100010][50],l;
inline int cod(char a)
{
    if(a=='A')
        return 1;
    if(a=='T')
        return 2;
    if(a=='C')
        return 3;
}
void init(std::string a, std::string b) {
    for(;a[l];++l)
    {
        for(int i=0;i<=3;++i)
            for(int j=0;j<=3;++j)
                nr[l+1][i*10+j]=nr[l][i*10+j];
        ++nr[l+1][cod(a[l])*10];
        ++nr[l+1][cod(b[l])];
        ++nr[l+1][cod(a[l])*10+cod(b[l])];
    }
}

int get_distance(int x, int y) {
    ++x;
    ++y;
    if(nr[y][10]-nr[x-1][10]!=nr[y][1]-nr[x-1][1]||nr[y][20]-nr[x-1][20]!=nr[y][2]-nr[x-1][2]||nr[y][30]-nr[x-1][30]!=nr[y][3]-nr[x-1][3])
        return -1;
    int a=nr[y][12]-nr[x-1][12];
    int b=nr[y][13]-nr[x-1][13];
    int c=nr[y][21]-nr[x-1][21];
    int d=nr[y][23]-nr[x-1][23];
    int e=nr[y][31]-nr[x-1][31];
    int f=nr[y][32]-nr[x-1][32];
    int ans=0;
    int adans=0;
    adans=std::min(a,c);
    ans+=adans;
    a-=adans;
    c-=adans;
    adans=std::min(b,e);
    ans+=adans;
    b-=adans;
    e-=adans;
    adans=std::min(d,f);
    ans+=adans;
    d-=adans;
    f-=adans;
    ans+=(a+b)*2;
	return ans;
}

Compilation message (stderr)

dna.cpp: In function 'int cod(char)':
dna.cpp:16:1: warning: control reaches end of non-void function [-Wreturn-type]
   16 | }
      | ^
#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...