Pagini recente »
Monitorul de evaluare
|
tabara2016
|
Istoria paginii utilizator/mihneamihnea
|
Borderou de evaluare (job #531036)
|
Cod sursă (job #317614)
Cod sursă (job
#317614)
#include <stdio.h>
#define MAXN 10000
int stiva[MAXN+1], nstiva;
char kind[MAXN+1];
inline int pot(int x, int k1, int k2){
int i;
i=nstiva;
while((i>0)&&(k2>0)&&(x>stiva[i])){
k1+=kind[i];
i--;
k2--;
}
if(k1>0){
return 1;
}
return 0;
}
int main(){
int n, k1, k2, x, a, b, i, j;
char p;
FILE *fin, *fout;
fin=fopen("domino.in", "r");
fout=fopen("domino.out", "w");
fscanf(fin, "%d%d%d", &n, &k1, &k2);
nstiva=0;
for(i=0; i<n; i++){
fscanf(fin, "%d%d", &a, &b);
x=a*10+b;
p=0;
if((b>a)&&(pot(b*10+a, k1, k2)==1)){
x=b*10+a;
p=1;
k1--;
}
while((nstiva>0)&&(k2>0)&&(x>stiva[nstiva])){
k1+=kind[nstiva];
nstiva--;
k2--;
}
nstiva++;
stiva[nstiva]=x;
kind[nstiva]=p;
if(p==0){
j=nstiva-1;
while((j>0)&&(x==stiva[j])&&(kind[j]==1)){
j--;
}
j++;
if((x==stiva[j])&&(kind[j]==1)){
kind[j]=0;
kind[nstiva]=1;
}
}
}
for(i=1; i<=nstiva-k2; i++){
fprintf(fout, "%d", stiva[i]);
}
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}