i am tryng to solve this spoj.com/problems/HASHIT/
but getting WA.. dont know why plzz help. !!
#include <map>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>
using namespace std;
typedef pair<string,string> pp;
int h(string key)
{
int hkey=0;
for(int i=1;i<=key.length();i++){
hkey += (int)(key[i-1]%101 * i%101)%101;
}
return hkey * 19;
}
int Hash(string key)
{
int hash_key = h(key)%101;
return hash_key;
}
int main()
{
int a[101],n,i,pos,t;
cin >> t;
while(t--){
string s1,str,s;
vector <pp> v;
vector <pp> :: iterator it,it1;
cin >> n;
memset(a,-1,sizeof(a));
map <string,int> m;
map <int,string> m1;
map <int,string> :: iterator m_it2;
map <string,int> :: iterator m_it;
v.clear();
m.clear();
m1.clear();
for(i=0;i<n;i++){
s1 = "";
cin >> str;
for(int k = 0;k<3;k++){
s1 += str[k];
}
s = str.erase(0,4);
v.push_back(pp(s1,s));
}
it1 = unique(v.begin(),v.end());
for(it = v.begin();it != it1;it++){
if((*it).first == "ADD"){
int key = Hash((*it).second);
int j = 0;
for(j=0;j<20;j++){
pos = (key + j*j + 23*j)%101;
if(a[pos] == -1){
a[pos] = 1;
break;
}
}
if(j == 20){
m[(*it).second] = -1;
}
m[(*it).second] = pos;
}else{
m[(*it).second] = -1;
}
}
for(m_it = m.begin();m_it != m.end(); m_it++){
if((*m_it).second != -1){
m1.insert(pair<int,string>((*m_it).second,(*m_it).first));
}
}
cout << m1.size() << endl;
for(m_it2 = m1.begin();m_it2 != m1.end(); m_it2++){
cout << (*m_it2).first <<":" << (*m_it2).second << endl;
}
}
return 0;
}