#include <iostream>
using namespace std;
const int TABLE_SIZE = 10;
bool insert(int key, int value, int keys[], int values[], int state[]) {
int index = key % TABLE_SIZE;
for (int i = 0; i < TABLE_SIZE; i++) {
int probe = (index + i) % TABLE_SIZE;
if (state[probe] == 0 || state[probe] == 2) {
keys[probe] = key;
values[probe] = value;
state[probe] = 1;
return true;
}
}
return false;
}
int search(int key, int keys[], int values[], int state[]) {
int index = key % TABLE_SIZE;
for (int i = 0; i < TABLE_SIZE; i++) {
int probe = (index + i) % TABLE_SIZE;
if (state[probe] == 0) return -1;
if (state[probe] == 1 && keys[probe] == key) return values[probe];
}
return -1;
}
bool remove(int key, int keys[], int values[], int state[]) {
int index = key % TABLE_SIZE;
for (int i = 0; i < TABLE_SIZE; i++) {
int probe = (index + i) % TABLE_SIZE;
if (state[probe] == 0) return false;
if (state[probe] == 1 && keys[probe] == key) {
keys[probe] = -1;
values[probe] = -1;
state[probe] = 2;
return true;
}
}
return false;
}
int main() {
int keys[TABLE_SIZE];
int values[TABLE_SIZE];
int state[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++) {
keys[i] = -1;
values[i] = -1;
state[i] = 0;
}
insert(1, 100, keys, values, state);
insert(11, 200, keys, values, state);
insert(21, 300, keys, values, state);
cout << "Keys: ";
for (int i = 0; i < TABLE_SIZE; i++) cout << keys[i] << " ";
cout << "\nValues: ";
for (int i = 0; i < TABLE_SIZE; i++) cout << values[i] << " ";
cout << "\nState: ";
for (int i = 0; i < TABLE_SIZE; i++) cout << state[i] << " ";
cout << endl;
cout << "Search 11: " << search(11, keys, values, state) << endl;
cout << "Delete 11: " << (remove(11, keys, values, state) ? "Done" : "Not found") << endl;
cout << "Keys: ";
for (int i = 0; i < TABLE_SIZE; i++) cout << keys[i] << " ";
cout << "\nValues: ";
for (int i = 0; i < TABLE_SIZE; i++) cout << values[i] << " ";
cout << "\nState: ";
for (int i = 0; i < TABLE_SIZE; i++) cout << state[i] << " ";
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IFRBQkxFX1NJWkUgPSAxMDsKCmJvb2wgaW5zZXJ0KGludCBrZXksIGludCB2YWx1ZSwgaW50IGtleXNbXSwgaW50IHZhbHVlc1tdLCBpbnQgc3RhdGVbXSkgewogICAgaW50IGluZGV4ID0ga2V5ICUgVEFCTEVfU0laRTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVEFCTEVfU0laRTsgaSsrKSB7CiAgICAgICAgaW50IHByb2JlID0gKGluZGV4ICsgaSkgJSBUQUJMRV9TSVpFOwogICAgICAgIGlmIChzdGF0ZVtwcm9iZV0gPT0gMCB8fCBzdGF0ZVtwcm9iZV0gPT0gMikgewogICAgICAgICAgICBrZXlzW3Byb2JlXSA9IGtleTsKICAgICAgICAgICAgdmFsdWVzW3Byb2JlXSA9IHZhbHVlOwogICAgICAgICAgICBzdGF0ZVtwcm9iZV0gPSAxOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmludCBzZWFyY2goaW50IGtleSwgaW50IGtleXNbXSwgaW50IHZhbHVlc1tdLCBpbnQgc3RhdGVbXSkgewogICAgaW50IGluZGV4ID0ga2V5ICUgVEFCTEVfU0laRTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVEFCTEVfU0laRTsgaSsrKSB7CiAgICAgICAgaW50IHByb2JlID0gKGluZGV4ICsgaSkgJSBUQUJMRV9TSVpFOwogICAgICAgIGlmIChzdGF0ZVtwcm9iZV0gPT0gMCkgcmV0dXJuIC0xOwogICAgICAgIGlmIChzdGF0ZVtwcm9iZV0gPT0gMSAmJiBrZXlzW3Byb2JlXSA9PSBrZXkpIHJldHVybiB2YWx1ZXNbcHJvYmVdOwogICAgfQogICAgcmV0dXJuIC0xOwp9Cgpib29sIHJlbW92ZShpbnQga2V5LCBpbnQga2V5c1tdLCBpbnQgdmFsdWVzW10sIGludCBzdGF0ZVtdKSB7CiAgICBpbnQgaW5kZXggPSBrZXkgJSBUQUJMRV9TSVpFOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUQUJMRV9TSVpFOyBpKyspIHsKICAgICAgICBpbnQgcHJvYmUgPSAoaW5kZXggKyBpKSAlIFRBQkxFX1NJWkU7CiAgICAgICAgaWYgKHN0YXRlW3Byb2JlXSA9PSAwKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHN0YXRlW3Byb2JlXSA9PSAxICYmIGtleXNbcHJvYmVdID09IGtleSkgewogICAgICAgICAgICBrZXlzW3Byb2JlXSA9IC0xOwogICAgICAgICAgICB2YWx1ZXNbcHJvYmVdID0gLTE7CiAgICAgICAgICAgIHN0YXRlW3Byb2JlXSA9IDI7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQga2V5c1tUQUJMRV9TSVpFXTsKICAgIGludCB2YWx1ZXNbVEFCTEVfU0laRV07CiAgICBpbnQgc3RhdGVbVEFCTEVfU0laRV07IAoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVEFCTEVfU0laRTsgaSsrKSB7CiAgICAgICAga2V5c1tpXSA9IC0xOwogICAgICAgIHZhbHVlc1tpXSA9IC0xOwogICAgICAgIHN0YXRlW2ldID0gMDsKICAgIH0KCiAgICBpbnNlcnQoMSwgMTAwLCBrZXlzLCB2YWx1ZXMsIHN0YXRlKTsKICAgIGluc2VydCgxMSwgMjAwLCBrZXlzLCB2YWx1ZXMsIHN0YXRlKTsKICAgIGluc2VydCgyMSwgMzAwLCBrZXlzLCB2YWx1ZXMsIHN0YXRlKTsKCiAgICBjb3V0IDw8ICJLZXlzOiAgICAiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUQUJMRV9TSVpFOyBpKyspIGNvdXQgPDwga2V5c1tpXSA8PCAiICI7CiAgICBjb3V0IDw8ICJcblZhbHVlczogICI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IFRBQkxFX1NJWkU7IGkrKykgY291dCA8PCB2YWx1ZXNbaV0gPDwgIiAiOwogICAgY291dCA8PCAiXG5TdGF0ZTogICAiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUQUJMRV9TSVpFOyBpKyspIGNvdXQgPDwgc3RhdGVbaV0gPDwgIiAiOwogICAgY291dCA8PCBlbmRsOwoKICAgIGNvdXQgPDwgIlNlYXJjaCAxMTogIiA8PCBzZWFyY2goMTEsIGtleXMsIHZhbHVlcywgc3RhdGUpIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJEZWxldGUgMTE6ICIgPDwgKHJlbW92ZSgxMSwga2V5cywgdmFsdWVzLCBzdGF0ZSkgPyAiRG9uZSIgOiAiTm90IGZvdW5kIikgPDwgZW5kbDsKCiAgICBjb3V0IDw8ICJLZXlzOiAgICAiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUQUJMRV9TSVpFOyBpKyspIGNvdXQgPDwga2V5c1tpXSA8PCAiICI7CiAgICBjb3V0IDw8ICJcblZhbHVlczogICI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IFRBQkxFX1NJWkU7IGkrKykgY291dCA8PCB2YWx1ZXNbaV0gPDwgIiAiOwogICAgY291dCA8PCAiXG5TdGF0ZTogICAiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUQUJMRV9TSVpFOyBpKyspIGNvdXQgPDwgc3RhdGVbaV0gPDwgIiAiOwogICAgY291dCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==