Cod sursa(job #2661324)

Utilizator TghicaGhica Tudor Tghica Data 21 octombrie 2020 19:25:32
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Temă vectori frecvență & hashing clasa a 9-a Marime 1.34 kb
#include <stdio.h>
#include <vector>
#include <ctype.h>
using namespace std;

#define MOD 666013

FILE *fin, *fout;
vector<int> myHash[MOD];

int readInt() {
  int ch, res = 0, semn = 1;

  while ( isspace( ch = fgetc( fin ) ) );
  if ( ch == '-' ) {
    semn = -1;
    ch = fgetc( fin );
  }
  do
    res = 10 * res + ch - '0';
  while ( isdigit( ch = fgetc( fin ) ) );

  return semn * res;
}

bool cauta(int x) {
  int cod = x % MOD;
  unsigned int i = 0;
  while (i < myHash[cod].size() && myHash[cod][i] != x)
    ++i;
  return i < myHash[cod].size();
}

void adauga(int x) {
  int cod = x % MOD;
  unsigned int 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 = x % MOD;
  unsigned int i = 0;
  while (i < myHash[cod].size() && myHash[cod][i] != x)
    ++i;
  if (i < myHash[cod].size())
    myHash[cod].erase(myHash[cod].begin() + i);
}

int main() {
  fin = fopen( "hashuri.in", "r" );
  fout = fopen( "hashuri.out", "w" );
  int c, a, n, i;
  fscanf( fin, "%d", &n );
  for( i = 0; i < n; i++ ) {
    c = readInt();
    a = readInt();
    if( c == 1 )
      adauga( a );
    else if( c == 2 )
      sterge( a );
    else fprintf( fout, "%d\n", cauta(a) );
  }
  return 0;
}