Cod sursă (job #799828)

Utilizator avatar Emre Isleam Emre Emre IP ascuns
Problemă Domino Compilator c-32 | 1,26 kb
Rundă Arhiva de probleme Status evaluat
Dată 14 dec. 2024 20:18:16 Scor 32
#include <stdio.h>
#include <stdlib.h>
#define MAXN 10000
int v[MAXN];
int next[MAXN];
int max(int a, int b){
  return a > b ? a : b;
}
int rot(int a){
  return max(((a % 10) * 10  + a/10),a);
}
int main()
{
  FILE*fin;
  FILE*fout;
  fin = fopen("domino.in","r");
  fout = fopen("domino.out","w");
  int n,k1,k2,i,a,b,e,st,ul,ok;
  fscanf(fin,"%d%d%d",&n,&k1,&k2);
  for(i = 0 ; i < n; i++ ){
    fscanf(fin,"%d%d",&a,&b);
    v[i] = a*10+b;
    next[i] = i+1;
  }
  st = 0;

  do{
    e = 0;
    for( i = st; i < n; i = next[i] ){
      ok = 0;
      if((v[i] % 10) > (v[i] / 10) && k1 > 0){
        v[i] = rot(v[i]);
        k1--;
        ok = 1;
      }
      //printf("v[i]:%d  next[i]:%d  rot(next[i]):%d  k1:%d k2:%d \n",v[i],v[next[i]],rot(v[next[i]]),k1,k2);
      if(v[i] < v[next[i]] && k2 > 0 ){
        if(i != st) next[ul] = next[i];
        else st = next[i];
        k2--;
        k1 += ok * 1;
        e++;
      }
      else if(v[i] < rot(v[next[i]]) && k2 > 0  && k1 > (0 - ok)){
        if(i != st) next[ul] = next[i];
        else st = next[i];
        k1 += ok * 1;
        e++;

      }


      ul = i;
    }

    }while(e > 0);
  for(i = st; i < n; i = next[i] )
    fprintf(fout,"%d",v[i]);
  return 0;
}