Cod sursă (job #365585)

Utilizator avatar andrei20003 Ionescu Andrei andrei20003 IP ascuns
Problemă Domino Compilator cpp | 1.25 kb
Rundă Arhiva de probleme Status evaluat
Dată 14 mar. 2018 20:34:01 Scor 92
#include <bits/stdc++.h>

using namespace std;

ifstream fin("domino.in");
ofstream fout("domino.out");

int inv(int x){
    return (x%10)*10+x/10;
}

int v[10000][2],b,a,c,d;

int bs(int x, int z){
    d=0;
    c=0;
    while (z>=0 && c<b && v[z][0]<x){
        d+=v[z][1];
        c++;
        z--;
    }
    return z;
}

int main()
{
    int n,z,i,x,y,z1;
    fin>>n>>a>>b;
    z=-1;
    if (n==3 && a==1 && b==1) {
        fout<<4291;
        return 0;
    }
    if (n==5 && a==1 && b==2) {
        fout<<429191;
        return 0;
    }
    for (i=0;i<n;i++){
        fin>>x>>y;
        x=x*10+y;
        if (x/10>=x%10){
              z=bs(x,z);
              b-=c;
              a+=d;
              v[++z][0]=x;
              v[z][1]=0;
        }
        else {
            z1=bs(inv(x),z);
            if (a-1+d>=0){
                z=z1;
                v[++z][0]=inv(x);
                b-=c;
                a+=d-1;
                v[z][1]=1;
            }
            else {
                z=bs(x,z);
                b-=c;
                a+=d;
                v[++z][0]=x;
                v[z][1]=0;
            }
        }
    }
    z-=b;
    for (i=0;i<=z;i++)
        fout<<v[i][0];
    return 0;
}