Cod sursa(job #1205842)

Utilizator hrazvanHarsan Razvan hrazvan Data 8 iulie 2014 11:53:48
Problema NextSeq Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <stdio.h>
#define MAXN 10000
#define MAXNR 10001
int v[MAXN];
int eq[MAXNR + 1], baza = 0;
int a[MAXN], b[MAXN];

void sort(int n){
  int i;
  for(i = 0; i < MAXNR + 1; i++)  eq[i] = 0;
  for(i = 0; i < n; i++)          eq[v[i]] = 1;
  for(i = 0; i < MAXNR + 1; i++){
    if(eq[i]){
      eq[i] = baza;
      baza++;
    }
  }
  return ;
}

void diff(int *a, int *n, int *b, int m){
  if(*n > m && a[(*n) - 1] == 0)  a[(*n) - 1]++;
  int i, trans = 0;
  for(i = 0; i < *n; i++){
    a[i] -= trans + b[i];
    if(a[i] >= 0)  trans = 0;
    else{
      trans = -((a[i] + 1) / baza) + 1;
      a[i] += trans * baza;
    }
  }
  i = (*n) - 1;
  while(a[i] == 0){
    (*n)--;
    i--;
  }
  return ;
}
int bxtob10(int *a, int n){
  int rez = 0, i, pw = 1;
  for(i = 0; i < n; i++){
    rez += a[i] * pw;
    pw *= baza;
  }
  return rez;
}

int main(){
  FILE *in = fopen("nextseq.in", "r");
  int n, m, p;
  fscanf(in, "%d%d%d", &n, &m, &p);
  int i;
  for(i = 0; i < n; i++){
    fscanf(in, "%d", &v[i]);
  }
  sort(n);
  int x;
  for(i = 0; i < m; i++){
    fscanf(in, "%d", &x);
    a[m - i - 1] = eq[x];
  }
  for(i = 0; i < p; i++){
    fscanf(in, "%d", &x);
    b[p - i - 1] = eq[x];
  }
  fclose(in);
  diff(b, &p, a, m);
  int rez = bxtob10(b, p);
  FILE *out = fopen("nextseq.out", "w");
  if(rez != 0)  fprintf(out, "%d", rez - 1);
  else          fprintf(out, "1");
  fclose(out);
  return 0;
}