Advertisement
las4

TACERTOSAPORRA

Apr 9th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. struct HashTable {
  7. private:
  8.     string keys[101];
  9.     int numberKeys;
  10.  
  11. public:
  12.     HashTable() {
  13.         for (int i = 0; i < 101; i++)
  14.             this->keys[i] = "";
  15.  
  16.         this->numberKeys = 0;
  17.     }
  18.  
  19.     int find(string key) {
  20.         int index = hash(key);
  21.         for (int i = 0; i < 20; i++) {
  22.             int newIndex = index + offset(i);
  23.             newIndex %= 101;
  24.  
  25.             if (this->keys[newIndex] == key)
  26.                 return newIndex;
  27.         }
  28.  
  29.         return -1;
  30.     }
  31.  
  32.     void insert(string key) {
  33.         if (find(key) == -1) {
  34.             int index = hash(key);
  35.             bool done = false;
  36.  
  37.             for (int i = 0; i < 20 && !done; i++) {
  38.                 int newIndex = index + offset(i);
  39.                 newIndex %= 101;
  40.  
  41.                 if (this->keys[newIndex] == "") {
  42.                     this->keys[newIndex] = key;
  43.                     done = true;
  44.                 }
  45.             }
  46.  
  47.             this->numberKeys++;
  48.         }
  49.     }
  50.  
  51.     void remove(string key) {
  52.         int index = find(key);
  53.         if (index != -1) {
  54.             this->keys[index] = "";
  55.             this->numberKeys--;
  56.         }
  57.     }
  58.  
  59.     int getNumberKeys() {
  60.         return this->numberKeys;
  61.     }
  62.  
  63.     void getKeys() {
  64.         for (int i = 0; i < 101; i++) {
  65.             if (this->keys[i] != "")
  66.                 cout << i << ":" << this->keys[i] << endl;
  67.         }
  68.     }
  69.  
  70. private:
  71.     int hash(string key) {
  72.         int sum = 0;
  73.         for (int i = 0; i < key.length(); i++)
  74.             sum += key[i] * (i + 1);
  75.  
  76.         sum *= 19;
  77.         return sum % 101;
  78.     }
  79.  
  80.     int offset(int attempt) {
  81.         int result = attempt * attempt;
  82.         result += 23 * attempt;
  83.         return result;
  84.     }
  85. };
  86.  
  87. int main() {
  88.     int numberTestCases, numberOperations;
  89.     cin >> numberTestCases;
  90.  
  91.     for (int i = 0; i < numberTestCases; i++) {
  92.         cin >> numberOperations;
  93.         HashTable hashTable;
  94.  
  95.         for (int j = 0; j < numberOperations; j++) {
  96.             string input, key = "";
  97.             cin >> input;
  98.  
  99.             for (int k = 4; k < input.length(); k++)
  100.                 key += input[k];
  101.  
  102.             if (key.length() > 0) {
  103.                 if (input[0] == 'A')
  104.                     hashTable.insert(key);
  105.                 else
  106.                     hashTable.remove(key);
  107.             }
  108.         }
  109.  
  110.         cout << hashTable.getNumberKeys() << endl;
  111.         hashTable.getKeys();
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement