Cod sursă (job #74034)

Utilizator avatar hrazvan Harsan Ovidiu Razvan hrazvan IP ascuns
Problemă Zapada (clasele 11 și 12) Compilator c | 1,01 kb
Rundă Arhiva de probleme Status evaluat
Dată 3 aug. 2014 13:32:37 Scor 0
#include <stdio.h>
#define MAXN 1000

int v1[MAXN + 1], v2[MAXN + 1];

int max2(int a, int b){
  return a > b ? a : b;
}

int main(){
  FILE *in = fopen("clepsidru.in", "r");
  int n, b, k;
  fscanf(in, "%d%d%d", &n, &b, &k);
  int i, sum = 0, t, last;
  for(i = 0; i < k; i++){
    fscanf(in, "%d%d", &t, &last);
    if(last == 1)  sum += t;
    else           sum -= t;
  }
  fclose(in);
  FILE *out = fopen("clepsidru.out", "w");
  fprintf(out, "%d\n", n + b - 1);
  if(sum > 0){
    int cb = b;
    for(i = max2(sum - b + 1, 0); b > 0 && i <= n; i++){
      v2[i] = 1;
      if(i != 0)  b--;
    }
    if(max2(sum - cb + 1, 0) > n) v2[n] = cb;
    else{
      if(sum - cb + 1 < 0) v2[0] += b;
      else             v2[n] += b;
    }
    v1[n] = v2[n];
    if(last == 2){
      for(i = 1; i < n; i++){
        v1[i] = v2[i];
        v2[i] = 0;
      }
    }
  }
  else  v2[0] = b;
  for(i = 0; i < n; i++){
    fprintf(out, "%d %d\n", v2[i], v1[i + 1]);
  }
  fclose(out);
  return 0;
}