Cod sursă (job #317614)

Utilizator avatar Herbert2002 Herbert Mohanu Herbert2002 IP ascuns
Problemă Domino Compilator cpp | 1,37 kb
Rundă Arhiva de probleme Status evaluat
Dată 19 oct. 2017 23:47:20 Scor 100
#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;
}