Cod sursa(job #2148775)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 1 martie 2018 23:25:27
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>

const int MAXN = 1e4;

int a[MAXN + 1], b[MAXN + 1], v[MAXN + 1], x[MAXN + 1];

void sub(int *a, int *b, int n) {
  int t = 0;
  for (int i = 1; i <= a[0]; ++i) {
    a[i] -= ((i <= b[0]) ? b[i] : 0) + t;
    a[i] += (t = a[i] < 0) * n;
  }
  for (; a[0] > 1 && !a[a[0]]; --a[0]);
}

int main() {
  FILE *fin, *fout;
  int n, m, p, w, ans, pow;
  fin = fopen("nextseq.in", "r");
  fscanf(fin, "%d%d%d", &n, &m, &p);
  for (int i = 1; i <= n; ++i) {
    fscanf(fin, "%d", &v[i]);
  }
  std::sort(v + 1, v + n + 1);
  for (int i = 1; i <= n; ++i) {
    x[v[i]] = i;
  }
  a[0] = m;
  for (int i = a[0]; i > 0; --i) {
    fscanf(fin, "%d", &w);
    a[i] = x[w];
  }
  b[0] = p;
  for (int i = b[0]; i > 0; --i) {
    fscanf(fin, "%d", &w);
    b[i] = x[w];
  }
  fclose(fin);
  sub(b, a, n);
  ans = 0;
  pow = 1;
  for (int i = 1; i <= b[0]; ++i) {
    ans += b[i] * pow;
    pow *= n;
  }
  fout = fopen("nextseq.out", "w");
  fprintf(fout, "%d\n", ans - 1);
  fclose(fout);
  return 0;
}