Cod sursă (job #317612)

Utilizator avatar Herbert2002 Herbert Mohanu Herbert2002 IP ascuns
Problemă Domino Compilator cpp | 1,09 kb
Rundă Arhiva de probleme Status evaluat
Dată 19 oct. 2017 23:43:28 Scor 88
#include<stdio.h>
using namespace std;
#define MAXN 10001
int stiva[MAXN];
char sw[MAXN];
int vf;
inline int ok(int x, int k1, int k2){
  int i;
  i=vf;
  while(i>0 && k2>0 && x>stiva[i]){
    k1+=sw[i];
    k2--;
    i--;
  }
  if(k1>0)
    return 1;
  return 0;
}
//k1 rotiri
//k2 eliminari
int main(){
  FILE*fin=fopen("domino.in", "r");
  FILE*fout=fopen("domino.out", "w");
  int n, j, k1, k2, i, a, b, c, nr, fl, x;
  fscanf(fin, "%d%d%d", &n, &k1, &k2);
  vf=0;
  for(i=1; i<=n; i++){
    fscanf(fin, "%d%d", &a, &b);
    x=a*10+b; fl=0;
    if(b>a && (ok(b*10+a, k1, k2)==1)){
      x=b*10+a;
      k1--;
      fl=1;
    }
//    printf("%d\n", x);
    while(vf>0 && k2>0 && x>stiva[vf]){
      k1+=sw[vf];
      k2--;
      vf--;
    }
    vf++; stiva[vf]=x; sw[vf]=fl;
//    if(fl==0){
//      j=vf-1;
//      while(j>0 && x==stiva[j] && sw[j]==1)
//        j--;
//      j++;
//      if(stiva[j]==x && sw[j]==1){
//        sw[j]=0;
//        sw[vf]=1;
//      }
//    }
  }
  for(i=1; i<=vf-k2; i++)
    fprintf(fout, "%d", stiva[i]);

  return 0;
}