Cod sursa(job #2727331)

Utilizator bossu78BossuL bossu78 Data 21 martie 2021 18:52:35
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <stdio.h>
#include <ctype.h>
#include <vector>
 
#define NMAX 1000000
#define MOD 666013
 
using namespace std;
 
FILE *fin;
int v[NMAX];
vector <int> myHash[MOD];
 
void adauga( int x ) {
    int cod, i;
 
    cod = x % MOD;
    i = 0;
    while ( i < myHash[cod].size() && myHash[cod][i] != x )
        i++;
    if ( i == myHash[cod].size() )
        myHash[cod].push_back( x );
}
 
void sterge( int x ) {
    int cod, i;
 
    cod = x % MOD;
    i = 0;
    while  ( i < myHash[cod].size() && myHash[cod][i] != x )
        i++;
    if ( i < myHash[cod].size() )
        myHash[cod].erase( myHash[cod].begin() + i );
}
 
bool cauta( int x ) {
    int cod, i;
 
    cod = x % MOD;
    i = 0;
    while ( i < myHash[cod].size() && myHash[cod][i] != x )
        i++;
 
    return i < myHash[cod].size();
}
 
int getNum() {
    int n;
    char ch;
 
    ch = fgetc( fin );
    while ( !isdigit( ch ) )
        ch = fgetc( fin );
 
    n = 0;
    while ( isdigit( ch ) ) {
        n = n * 10 + ch - '0';
        ch = fgetc( fin );
    }
 
    return n;
}
 
int main() {
    FILE *fout;
    int n, tip, x, i;
 
    fin = fopen( "hashuri.in", "r" );
    fout = fopen( "hashuri.out", "w" );
 
    fscanf( fin, "%d", &n );
    for ( i = 0; i < n; i++ ) {
        tip = getNum();
        x = getNum();
 
        if ( tip == 1 )
            adauga( x );
        else if ( tip == 2 )
            sterge( x );
        else
            fprintf( fout, "%d\n", cauta( x ) );
    }
 
    fclose( fin );
    fclose( fout );
    return 0;
}