CF2A我的代码第4测试点错,别人用的都是map,但我用的是哈希,这是我的代码:
#include<bits/stdc++.h>
#define int long long
#define mod 1004535809
using namespace std;
string mz[1010];
int z[1010];
struct ren
{
int zhi,__hash;
}h[1010];
int hash1(int i)
{
int l=mz[i].size(),sum=0,k=1;
for(int j=0;j<l;j++)
{
sum+=((mz[i][j]-'a')%mod)*(k%mod)%mod;
k*=2;
}
return sum;
}
bool cmp(ren a,ren b)
{
return a.__hash<b.__hash;
}
signed main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>mz[i]>>z[i];
h[i].zhi=z[i];
h[i].__hash=hash1(i);
// h[__hash[i]]+=tmp;
}
sort(h+1,h+n+1,cmp);
int ax=0;
for(int i=1;i<=n;i++)
{
int j=i+1,sum=h[i].zhi;
while(j<=n && h[i].__hash==h[j].__hash) sum+=h[j++].zhi;
ax=max(ax,sum);
}
int ans=1001;
for(int i=1;i<=n;i++)
{
int ha=hash1(i),j=n,sum=z[i];
while(j>=1 && mz[i]!=mz[j]) j--;
for(int k=i+1;k<=j;k++)
{
if(mz[k]==mz[i]) sum+=z[k];
}
if(sum==ax) ans=min(ans,j);
}
cout<<mz[ans];
return 0;
}