fork(2) download
  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. using namespace std;
  5.  
  6. int h(const string& s)
  7. {
  8. int len = s.length();
  9. int temp = 0;
  10. int myascii;
  11. for(int i=0; i<len; i++)
  12. myascii = s[i], temp+=(myascii*(i+1));
  13. return temp*19;
  14. }
  15.  
  16. int Hash(const string& st)
  17. {
  18. int ans = h(st)%101;
  19. return ans;
  20. }
  21.  
  22. int main()
  23. {
  24. int t;
  25. cin>>t;
  26. while(t--)
  27. {
  28. vector<string> V(101);
  29. for(int k=0; k<101; k++)
  30. V[k] = "";
  31. int n;
  32. cin>>n;
  33. cin.get();
  34. int counter = 0;
  35. while(n--)
  36. {
  37. string ip;
  38. getline(cin, ip);
  39. int l = ip.length()-1;
  40. string str = ip.substr(4, l);
  41. string task = ip.substr(0, 3);
  42. int hk = Hash(str);
  43. if(task == "ADD")
  44. {
  45. for(int j=0; j<=19; j++)
  46. {
  47. int pos = (hk + j*j + 23*j)%101;
  48. if(V[pos] == str)
  49. break;
  50. else if(V[pos] == "")
  51. {
  52. V[pos] = str;
  53. counter++;
  54. break;
  55. }
  56. }
  57. }
  58. else
  59. {
  60. for(int j=0; j<=19; j++)
  61. {
  62. int pos = (hk + j*j + 23*j)%101;
  63. if(V[pos] == str)
  64. {
  65. V[pos] = "";
  66. counter--;
  67. break;
  68. }
  69. }
  70. }
  71. }
  72. cout<<counter<<endl;
  73. for(int r=0; r<101; r++)
  74. {
  75. if(V[r] != "")
  76. cout<<r<<":"<<V[r]<<endl;
  77. }
  78. }
  79. return 0;
  80. }
  81.  
Success #stdin #stdout 0s 2868KB
stdin
1
11
ADD:marsz
ADD:marsz
ADD:Dabrowski
ADD:z
ADD:ziemii
ADD:wloskiej
ADD:do
ADD:Polski
DEL:od
DEL:do
DEL:wloskiej
stdout
5
34:Dabrowski
46:Polski
63:marsz
76:ziemii
96:z