Я пытаюсь построить набор, используя hash-map, но система тестирования отправляет мне неправильные ответы. У меня нет доступа к тестам, но на моих тестах код работает нормально. У меня нет идей для новых тестов, может быть, у вас есть какие-нибудь?
Это мой код:
#include <iostream>
#include <fstream>
using namespace std;
int h1(int number) {
number %= 1000003;
return abs(number);
}
int h2(int number) {
number = number % 999991 + 12;
return abs(number);
}
int Insert(int * Hash_table,bool * Deleted,int& number) {
int x = h1(number);
int y = h2(number);
for(int i = 0; i < 1000003;i++) {
if(Hash_table[x] == NULL || Deleted[x]) {
Hash_table[x] = number;
Deleted[x] = false;
break;
}
x = (x + i * y) % 1000003;
}
}
string Exists(int * Hash_table,bool * Deleted,int& number) {
int x = h1(number);
int y = h2(number);
for(int i = 0; i < 1000003;i++) {
if(Hash_table[x] == 0 && number == 0 && !Deleted[x])
return "true\n";
if(Hash_table[x] != NULL)
if(Hash_table[x] == number && !Deleted[x] ) {
return "true\n";
}
if(Hash_table[x] == NULL || Deleted[x])
return "false\n";
x = (x + i * y) % 1000003;
}
}
int Delete(int * Hash_table,bool * Deleted,int& number){
int x = h1(number);
int y = h2(number);
for(int i = 0; i < 1000003;i++){
if(Hash_table[x] == 0 && number == 0){
Deleted[x] = true;
break;
}
if(Hash_table[x] != NULL) {
if(Hash_table[x] == number) {
Deleted[x] = true;
break;
}
x = (x + i * y) % 1000003;
}
else
return 0;
}
}
int main () {
int Hash_table[1000003];
bool Deleted[1000003];
ifstream input("set.in");
ofstream output("set.out");
string command;
int number;
while(true) {
input >> command;
if(input.eof())
break;
if(command == "insert") {
input >> number;
Insert(Hash_table,Deleted,number);
}
if(command == "delete") {
input >> number;
Delete(Hash_table,Deleted,number);
}
if(command == "exists") {
input >> number;
output << Exists(Hash_table,Deleted,number);
}
}
}
Мне нужно реализовать такие команды, как «ввод», «существует» и «удалить». Я думаю, что логика кода хороша, но я не уверен насчет хеш-функций.
Обновлено: добавлены операторы if для 0 и теперь h1 и h2 возвращают абсолютные значения.
Но сейчас у меня проблемы в 4-м тесте.