Cod sursă (job #561027)

Utilizator avatar andrei_marciuc Marciuc Andrei andrei_marciuc IP ascuns
Problemă Beculețe (clasele 9-10) Compilator cpp | 1,04 kb
Rundă Arhiva de probleme Status evaluat
Dată 20 iul. 2020 17:41:43 Scor 100
#include <fstream>
using namespace std;
ifstream cin( "beculete.in" );
ofstream cout( "beculete.out" );
unsigned v[ 50000 / 32 + 2 ];

int valbit( int poz ){
    unsigned x = v[ poz >> 5 ];
    int y = poz & ( ( 1 << 5 ) - 1 );
    return ( x >> y ) & 1;
}

void cebit( int poz, int b, int i ){
    int x = poz >> 5;
    int y = poz & ( ( 1 << 5 ) - 1 );
    v[ x ] &= ( ~( 1 << y ) );
    v[ x ] |= ( b << y );
}

int main(){
    int n, d, l, c, bit, i, j, a, b, aux;
    unsigned m;
    cin >> n >> d;
    if( d )
        cin >> 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;
            m = ( v[ a ] << 1 ) + b;
            v[ a ] ^= m;
            b = aux & 1;
        }
        v[ a ]= aux;
        while( j <= d && l == i ){
          cebit( c - 1, bit, i );
          cin >> l >> c >> bit;
          j++;
        }
    }
    for( i = 0; i < n; i++ )
        cout << valbit( i ) << ' ';
    return 0;
}