Advertisement
Goga21

Untitled

Mar 31st, 2024
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.05 KB | Source Code | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct Item{
  6.     string key;
  7.     int value;
  8. };
  9.  
  10. struct Hashmap{
  11.     Item* element{};
  12.     int a = 13;
  13.     long m = 1e9 + 19;
  14.     long capacity;
  15.     long count = 0;
  16.  
  17.     long hash(string key) const{
  18.         long c = a;
  19.         long sum = 0;
  20.         for (int i = 0; i < key.size(); ++i) {
  21.             sum += ((key[i] - '-' + 1) * c) % m;
  22.             c = (c * a) % m;
  23.         }
  24.         return sum % capacity;
  25.     }
  26.     void init(int size){
  27.         this->element = (Item*)malloc(size * sizeof(Item));
  28.         capacity = size;
  29.     }
  30.     void put(const string& key, int value){
  31.         long hashed = hash(key);
  32.         if(this->element[hashed].key == key){
  33.             this->element[hashed].value = value;
  34.         }else if(!this->element[hashed].key.empty()){
  35.             long temp = hashed + 1;
  36.             while(!this->element[temp].key.empty()){
  37.                 if(temp < capacity){
  38.                     temp++;
  39.                 }else{
  40.                     temp = 0;
  41.                 }
  42.             }
  43.             this->element[temp].key = key;
  44.             this->element[temp].value = value;
  45.         }else{
  46.             this->element[hashed].key = key;
  47.             this->element[hashed].value = value;
  48.         }
  49.         this->count++;
  50.     }
  51.     int get(string key) const{
  52.         long hashed = hash(key);
  53.         if(this->element[hashed].key == key){
  54.             return this->element[hashed].value;
  55.         }else{
  56.             for(int i = hashed + 1; i < count; i++){
  57.                 if(i == count - 1){
  58.                     for(int j = 0; j < hashed; j++){
  59.                         if(this->element[j].key == key) return this->element[j].value;
  60.                     }
  61.                     break;
  62.                 }
  63.                 if(this->element[i].key == key) return this->element[i].value;
  64.             }
  65.             return -1;
  66.         }
  67.     }
  68.     int delete_key(string key) const{
  69.         int hashed = hash(key);
  70.         if(this->element[hashed].key.empty()){
  71.             return -1;
  72.         }
  73.         int val = this->element[hashed].value;
  74.         this->element[hashed].key = "";
  75.         this->element[hashed].value = 0;
  76.         return val;
  77.     }
  78. };
  79.  
  80. int main(){
  81.     Hashmap hashmap;
  82.     int n;
  83.     cin >> n;
  84.     hashmap.init(n + n / 2);
  85.     vector<string> res;
  86.     while(n--){
  87.         string request;
  88.         cin >> request;
  89.         if(request == "get" || request == "delete"){
  90.             string key;
  91.             cin >> key;
  92.             int ans;
  93.             if(request == "get"){
  94.                 ans = hashmap.get(key);
  95.             }else{
  96.                 ans = hashmap.delete_key(key);
  97.             }
  98.             if(ans == -1){
  99.                 res.emplace_back("None");
  100.             }else{
  101.                 res.push_back(to_string(ans));
  102.             }
  103.         }else if(request == "put"){
  104.             string key;
  105.             int value;
  106.             cin >> key >> value;
  107.             hashmap.put(key, value);
  108.         }
  109.     }
  110.     for(auto el : res){
  111.         cout << el << '\n';
  112.     }
  113. }
  114.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement