Cod sursă (job #120531)

Utilizator avatar Pasarel Alex Oltean Pasarel IP ascuns
Problemă Beculețe (clasele 9-10) Compilator c | 1.04 kb
Rundă Arhiva de probleme Status evaluat
Dată 19 feb. 2015 21:32:13 Scor 90
#include <stdio.h>
#include <stdlib.h>
#define MAX 1563

unsigned bit[MAX];

void set(int i, int x) {
    int mask;
    mask = ~(1 << (31 - (i & 31)));
    bit[i >> 5] = (bit[i >> 5] & mask) ^ (x << (31 - (i & 31)));
}

int get(int i) {
    return ((bit[i >> 5] >> ( 31 - (i & 31)))  & 1);
}

int main()
{
	int n, d, l, c;
	int valoare;
	unsigned mask = 0;
	unsigned maskhelper = 0;
	int lim;
	int i;
	int j;
	FILE *in;
	FILE *out;

	in = fopen("beculete.in", "r");
	fscanf(in, "%d %d %d %d %d", &n, &d, &l, &c, &valoare);
	set(0, 1);

	for (i = 1; i < n; i++) {
        lim = (i >> 5) + 1;
        while (i == l && d) {
			set(c - 1, valoare);
			fscanf(in, "%d %d %d", &l, &c, &valoare);
			d--;
		}
        for (j = 0; j < lim; j++) {
            mask = (maskhelper << 31) | (bit[j] >> 1);
            maskhelper = bit[j] & 1;
            bit[j] ^= mask;
        }
	}
    fclose(in);

	out = fopen("beculete.out", "w");
	for (i = 0; i < n; i++)
		fprintf(out, "%d ", get(i));
	fclose(out);

    return 0;
}