fork download
  1. #include<iostream>
  2. #include<map>
  3. using namespace std;
  4. int main()
  5. {
  6. int t;
  7. cin>>t;
  8. while(t--)
  9. {
  10. string key[101];
  11. for(int i=0;i<101;i++)
  12. {
  13. key[i]="";
  14. }
  15. map<string,int> m;
  16. map<int,string> p;
  17. int o;
  18. cin>>o;
  19. while(o--)
  20. {
  21. string w;
  22. cin>>w;
  23. if(w==""||w.length()>19||w.length()<=4)
  24. {
  25. continue;
  26. }
  27.  
  28. string op=w.substr(0,3);
  29. string s=w.substr(4);
  30. int n=s.length();
  31. int h=0;
  32. for(int i=0;i<n;i++)
  33. {
  34. h+=(i+1)*int(s[i]);
  35. }
  36. h*=19;
  37. h=h%101;
  38. if(op=="ADD")
  39. {
  40. for(int j=0;j<=19;j++)
  41. {
  42. int ht=(h+j*j+23*j)%101;
  43.  
  44. if(key[ht]=="")
  45. {
  46. if(m.find(s)==m.end())
  47. {
  48. m[s]=ht;
  49. p[ht]=s;
  50. key[ht]=s;
  51. break;
  52. }
  53. }
  54. }
  55. }
  56. else if(op=="DEL")
  57. {
  58. for(int j=0;j<=19;j++)
  59. {
  60. int ht=(h+j*j+23*j)%101;
  61. if(key[ht]!="")
  62. {
  63. if(m.find(s)!=m.end())
  64. {
  65. //m[s]=ht;
  66. m.erase(s);
  67. p.erase(ht);
  68. key[ht]="";
  69. break;
  70. }
  71. }
  72. }
  73. }
  74.  
  75.  
  76. }
  77. if(p.size()>0)
  78. {
  79. cout<<p.size()<<endl;
  80. for(map<int,string> :: iterator it=p.begin();it!=p.end();it++)
  81. {
  82. cout<<it->first<<":"<<it->second<<endl;
  83. }
  84. }
  85.  
  86. }
  87. }
Success #stdin #stdout 0s 3240KB
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