Cod sursa(job #1001841)

Utilizator lukkerLiNoimi Semain lukker Data 26 septembrie 2013 11:51:21
Problema Hashuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#define N 1000000
#define P 17
using namespace std;

int p[N/P+1] = {0};

int sh(int x, bool t) {
	if(t) return x/P;
	return x%P;
}

void in(int x) {
	p[sh(x,1)] *= P+1;
	p[sh(x,1)] += sh(x,0);
}

void out(int x) {
	int num[18];
	int aux = p[sh(x,1)], i = 0;
	while(aux!=0) {
		num[++i] = aux%(P+1);
		aux /= P+1;
	}
	p[sh(x,1)] = 0;
	for(int k=1;k<=i;k++) {
		if(num[k]==sh(x,0)) continue;
		p[sh(num[k],1)] *= P+1;
		p[sh(num[k],1)] += sh(num[k],0);
	}
}

bool look(int x) {
	bool ok = false;
	int aux = p[sh(x,1)];
	while(aux!=0) {
		if(aux%(P+1)==sh(x,0)) {ok = true;break;}
		aux /= P+1;
	}
	
	return ok;
}

int main() {
	ifstream f("hashuri.in");
	ofstream fout("hashuri.out");
	int n, o, p;
	f>>n;
	while(n-->0) {
		f>>o>>p;
		switch(o) {
			case 1: in(p); break;
			case 2: out(p); break;
			case 3: fout<<look(p)<<endl; break;
		}
	}
	
	return 0;
}