Cod sursă (job #462986)

Utilizator avatar andra_alazaroaie Andra Alazaroaie andra_alazaroaie IP ascuns
Problemă Beculețe (clasele 9-10) Compilator c | 1,00 kb
Rundă Arhiva de probleme Status evaluat
Dată 28 mar. 2019 00:06:35 Scor 0
#include <stdio.h>
#define MAX 50000
FILE *fin,*fout;
unsigned v[MAX/32+2];

void setBit(int poz, int b, int i){
  int x=poz>>5;
  int y=poz&((1<<5)-1);//poz%32
  v[x]&=(~(1<<y));     //setez bitul y pe 0
  v[x]|=(b<<y);        //ii dau bitului y valoarea b
}

int main(){
  fin=fopen("beculete.in","r");
  fout=fopen("beculete.out","w");
  int n,d,l,c,bit,i,j,a,b,aux;
  unsigned mask;

  fscanf(fin,"%d%d",&n,&d);
  if(d)
    fscanf(fin,"%d%d%d",&l,&c,&bit);
  j=v[0]=1;
  for(i=2; i<=n; i++){
    b=0;
    for(a=0; a*32<=i; a++){
      aux=v[a]>>31;
      mask=(v[a]<<1)+b;
      v[a]^=mask;
      b=aux;
    }
    v[a]=aux;
    while(j<=d && l==i){
      setBit(c-1,bit,i);
      fscanf(fin,"%d%d%d",&l,&c,&bit);
      j++;
    }
  }
  for(a=0; a<=(n-32)/32; a++)
    for(i=0; i<32; i++){
      fprintf(fout,"%u ",v[a]&1);
      v[a]>>1;
    }
  for(i=0; i<n-a*32; i++){
    fprintf(fout,"%u ",v[a]&1);
    v[a]>>1;
  }
  fclose(fin);
  fclose(fout);
  return 0;
}