Pentru această operație este nevoie să te autentifici.
Cod sursă (job #119336)
Utilizator |
|
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;
}