Pagini recente » Cod sursa (job #314817) | Cod sursa (job #445029) | Cod sursa (job #1808314) | Cod sursa (job #414438) | Cod sursa (job #687073)
Cod sursa(job #687073)
#include <fstream>
#include <vector>
using std::vector;
template <typename T>
class hash
{
private:
//const static unsigned TABLE_SIZE = 1u << 2u;
const static unsigned TABLE_SIZE = 666013u;
vector<T> table[TABLE_SIZE];
//unsigned h(T key)
//{
// return (int)floor( TABLE_SIZE * (0.6180340 * key - floor(0.6180340 * key) ) );
//}
unsigned h(T key)
{
return key % TABLE_SIZE;
}
typename vector<T>::iterator search(T key)
{
for(typename vector<T>::iterator i = table[h(key)].begin() ; i != table[h(key)].end(); ++i)
if(*i == key)
return i;
return table[h(key)].end();
}
public:
//hash() : table(new vector<T>[TABLE_SIZE]) {}
//~hash() { delete[] table; }
bool insert(T key)
{
if(search(key) == table[h(key)].end() )
{
table[h(key)].push_back(key);
return true;
}
return false;
}
bool remove(T key)
{
typename vector<T>::iterator i = search(key);
if(i != table[h(key)].end())
{
table[h(key)].erase(i);
return true;
}
return false;
}
bool find(T key)
{
return search(key) != table[h(key)].end();
}
};
hash<unsigned long long> h;
int main()
{
std::ifstream in("hashuri.in");
std::ofstream out("hashuri.out");
unsigned N;
in >> N;
char code;
unsigned long long key;
while(N--)
{
in >> code >> key;
in.ignore();
switch(code)
{
case '1':
h.insert(key);
break;
case '2':
h.remove(key);
break;
case '3':
out << h.find(key) << '\n';
break;
}
}
}