Pentru această operație este nevoie să te autentifici.

Cod sursă (job #119336)

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ă 18 feb. 2015 09:40:38 Scor 9
#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)%64)));
            else v[aux][(c-1)/64+1]=v[aux][(c-1)/64+1]&(~(v1<<(63-((c-1)%64))));

            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)%64)));
            else v[aux][(c-1)/64+1]=v[aux][(c-1)/64+1]&(~(v1<<(63-((c-1)%64))));
        }
    }

    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;
}