关于CF2A
  • 板块题目总版
  • 楼主王熙文
  • 当前回复8
  • 已保存回复8
  • 发布时间2021/1/6 15:47
  • 上次更新2023/11/5 05:05:59
查看原帖
关于CF2A
353688
王熙文楼主2021/1/6 15:47

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;
}
2021/1/6 15:47
加载中...