Pagini recente »
Borderou de evaluare (job #672015)
|
Borderou de evaluare (job #726714)
|
Tema 10 clasele 9-10 2014/15
|
Istoria paginii runda/2016-04-14-clasa-7-tema-27/clasament
|
Cod sursă (job #119260)
Cod sursă (job
#119260)
#include <stdio.h>
using namespace std;
const unsigned short int N=50000/63 + 1;
const unsigned short int D=10001;
unsigned long long a[N];
unsigned short int na;
unsigned short int x[D],y[D],v[D];
int main()
{
FILE *in=fopen("beculete.in","r");
FILE *out=fopen("beculete.out","w");
unsigned short int n,d,i,j,p,k;
unsigned long long bit1,bit2;
fscanf(in,"%hu%hu",&n,&d);
for(i=0;i<d;i++)
{
fscanf(in,"%hu%hu%hu",&x[i],&y[i],&v[i]);
x[i]--;
y[i]--;
}
na=1;
a[0]=1LLU;
p=0;
for(i=1;i<n;i++)
{
bit1=bit2=0LLU;
//formeaza linia i (liniile incep de la 0) si apoi verifica bitii
for(j=0;j<na;j++)
{
bit2=(a[j]&(1LLU<<63))>>63;
a[j]^=a[j]<<1;
a[j]^=bit1;
bit1=bit2;
while(p<d && x[p]==i && y[p]>=64*j && y[p]<64*(j+1))
{
a[j]&=~(1LLU<<(y[p]-64*j));
if(v[p]) a[j]+=1LLU<<(y[p]-64*j);
p++;
}
}
if(bit1)
{
a[na]=1LLU;
if(p<d && x[p]==i && y[p]==64*na && v[p]==0)
{
a[na]=0LLU;
p++;
}
na++;
}
//afiseaza
/*for(j=0;j<na;j++)
{
for(k=0;k<64;k++)
{
if(a[j]&(1LLU<<k)) printf("1");
else printf("0");
}
}
printf("\n");*/
}
i=0;
j=0;
while(i<n)
{
k=0;
while(i<n && k<64)
{
fprintf(out,"%d",(a[j]&(1LLU<<k))>>k);
if(i<n-1) fprintf(out," ");
k++;
i++;
}
j++;
}
return 0;
}