Submission #1293745

#TimeUsernameProblemLanguageResultExecution timeMemory
1293745AbdullahIshfaqMutating DNA (IOI21_dna)C++20
100 / 100
23 ms6124 KiB
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define MOD 998244353
int dp[100100][3][3];
void init(string a, string b)
{
    string key = "ACT";
    for (int i = 1; i <= a.size(); i++)
        for (int j = 0; j < 3; j++)
            for (int k = 0; k < 3; k++)
                dp[i][j][k] = dp[i - 1][j][k] + (a[i - 1] == key[j] and b[i - 1] == key[k]);
}

int get_distance(int l, int r)
{
    int ans = 0, prev = 0;
    for (int i = 0; i < 3; i++)
    {
        int next = (i + 1) % 3, x = dp[r + 1][i][next] - dp[l][i][next], y = dp[r + 1][next][i] - dp[l][next][i];
        if (i)
        {
            if (prev + y != x){
                return -1;
            }
        }
        else{
            prev = x - y;
            ans += 2 * abs(prev);
        }
        ans += min(x, y);
    }
    return ans;
}
#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...