Cod sursă (job #118779)

Utilizator avatar nita_teddy Teddy Nita nita_teddy IP ascuns
Problemă Beculețe (clasele 9-10) Compilator cpp | 1,30 kb
Rundă Tema 15 clasele 9-10 2014/15 Status evaluat
Dată 17 feb. 2015 12:47:44 Scor 10
#include<cstdio>
#define MAX_N 50000
using namespace std;

unsigned long long v[2][MAX_N/64+2];

int main(){
    freopen ("beculete.in","r",stdin);
    freopen ("beculete.out","w",stdout);
    int n,i,d,j,k=1,aux=0,l,c,b;
    unsigned long long p,v1=1;

    scanf ("%d%d",&n,&d);
    scanf ("%d%d%d",&l,&c,&b);

    v[0][1]=(v1<<63);
    if (l==1){
        if (b==0) v[0][1]=0;
        if (d>1) scanf ("%d%d%d",&l,&c,&b);
        else l=n+1;
        k=2;
    }

    for(i=2;i<=n;i++){
        for(j=1;j<=i/64+1;j++)
            v[aux^1][j]=v[aux][j]^((v[aux][j]>>1)+((v[aux][j-1]&1)<<63));

        aux^=1;

        while(l==i &&k<d){
            if (b==1)
                v[aux][(c-1)/64+1]=v[aux][(c-1)/64+1]|(v1<<(63-((c-1)&63)));
            else v[aux][(c-1)/64+1]=v[aux][(c-1)/64+1]&(~(v1<<(63-((c-1)&63))));

            scanf ("%d%d%d",&l,&c,&b);
            k++;
        }
        if (l==i){
            if (b==1)
                v[aux][(c-1)/64+1]=v[aux][(c-1)/64+1]|(v1<<(63-((c-1)&63)));
            else v[aux][(c-1)/64+1]=v[aux][(c-1)/64+1]&(~(v1<<(63-((c-1)&63))));
        }
    }

    for(i=1;i<=n;i++){
        p=(v1<<63);

        while(p>0 &&i<=n){
            if ((v[aux][(i-1)/64+1]&p)==0) printf ("0 ");
            else printf ("1 ");
            p/=2;
            i++;
        }
    }

    return 0;
}