Submission #1159431

#TimeUsernameProblemLanguageResultExecution timeMemory
1159431equation_trackerDNA 돌연변이 (IOI21_dna)C++20
35 / 100
24 ms7176 KiB
#include "dna.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> pre_ta, pre_at, pre_ct, pre_tc, pre_ac, pre_ca;
void init(std::string a, std::string b)
{
  ll n = a.size();
  pre_ca.resize(n + 1, 0);
  pre_ac.resize(n + 1, 0);
  pre_at.resize(n + 1, 0);
  pre_ta.resize(n + 1, 0);
  pre_tc.resize(n + 1, 0);
  pre_ct.resize(n + 1, 0);
  for (ll i = 0; i < n; i++)
  {
    if (a[i] == 'C' && b[i] == 'A')
      pre_ca[i + 1]++;
    else if (a[i] == 'A' && b[i] == 'C')
      pre_ac[i + 1]++;
    else if (a[i] == 'A' && b[i] == 'T')
      pre_at[i + 1]++;
    else if (a[i] == 'T' && b[i] == 'A')
      pre_ta[i + 1]++;
    else if (a[i] == 'T' && b[i] == 'C')
      pre_tc[i + 1]++;
    else if (a[i] == 'C' && b[i] == 'T')
      pre_ct[i + 1]++;
  }
  for (ll i = 1; i <= n; i++)
  {
    pre_ca[i] += pre_ca[i - 1];
    pre_ac[i] += pre_ac[i - 1];
    pre_at[i] += pre_at[i - 1];
    pre_ta[i] += pre_ta[i - 1];
    pre_tc[i] += pre_tc[i - 1];
    pre_ct[i] += pre_ct[i - 1];
  }
}
int get_distance(int x, int y)
{
  ll ca = pre_ca[y+1] - pre_ca[x];
  ll ac = pre_ac[y+1] - pre_ac[x];
  ll at = pre_at[y+1] - pre_at[x];
  ll ta = pre_ta[y+1] - pre_ta[x];
  ll ct = pre_ct[y+1] - pre_ct[x];
  ll tc = pre_tc[y+1] - pre_tc[x];
  ll AT_min = min(at, ta);
  ll AC_min = min(ac, ca);
  ll CT_min = min(ct, tc);
  ll AT_max = max(at, ta);
  ll AC_max = max(ac, ca);
  ll CT_max = max(ct, tc);
  ll AC_dif = AC_max - AC_min;
  ll AT_dif = AT_max - AT_min;
  ll CT_dif = CT_max - CT_min;

  if (AC_dif == AT_dif && AT_dif == CT_dif) return 2 * AC_dif + (AC_min + CT_min + AT_min);
  return -1;
}
#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...