Submission #1253732

#TimeUsernameProblemLanguageResultExecution timeMemory
1253732flashmtMigrations (IOI25_migrations)C++20
30 / 100
29 ms460 KiB
#include "migrations.h"
#include <bits/stdc++.h>
#ifdef LOCAL
#include "Debug.h"
#else
#define debug(...) 42
#endif
using namespace std;
const int N = 1e4;
const int Z = 4;

int furthest, d[N];

int send_message(int n, int i, int Pi) {
  d[i] = d[Pi] + 1;
  if (d[i] > d[furthest])
    furthest = i;

  if (i == n - 1)
    return furthest >= n - Z ? n - furthest : 0;

  if (i >= n - 3)
  {
    if (furthest >= n - 10)
    {
      for (int j = n - 3, val = furthest - (n - 10); j < n - 1; j++)
      {
        if (j == i)
          return val % Z + 1;
        val /= Z;
      }
    }
    return 0;
  }

  if (i >= n - 10)
  {
    for (int j = n - 10, val = furthest; j < n - 3; j++)
    {
      if (j == i)
        return val % Z + 1;
      val /= Z;
    }
  }

  return 0;
}

pair<int, int> longest_path(vector<int> s)
{
  int n = size(s);
  if (s[n - 1])
    return {0, n - s[n - 1]};

  int u = 0, isBad = 0;
  for (int i = n - 2; i >= n - 3; i--)
    if (!s[i]) isBad = 1;
    else u = u * Z + s[i] - 1;

  if (!isBad)
    return {0, u + n - 10};

  int v = 0;
  for (int i = n - 4; i >= n - 10; i--)
    v = v * Z + s[i] - 1;
  return {0, v};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...