steam 字符串hash or map
【问题描述】
山山又开始颓了, 打开 steam 先看看玩什么。打开之后惊异的发现,这周这么多免费
游戏,不过看起来好多都玩过啊,不知道玩什么了,于是他浏览了下游戏,发现只有一个游
戏玩过几遍,其他几乎只玩过一遍的,也有根本没玩过的,鉴于 steam 上的免费游戏一般
都是奇葩游戏,所以他认为玩过次数最多的那个游戏一定更好玩,他就会玩玩过最多的游戏,
由于游戏名字太难记了,所以请你来统计一下他玩过的游戏记录,并且告诉他玩什么游戏。
【输入格式】
输入文件名为 steam.in。
第一行一个 n,一个 m,表示 n 个游戏,m 条游戏记录
接下来 m 行一行一个数字 ai,表示他玩的游戏名,保证每个游戏名等长
【输出格式】
输出文件名为 steam.out。
第一行输出一个数表示他这次要玩的游戏名,保证答案
样例:
输入:
4 4
213151541243213
415415436435343
213151541243213
643453251745433
输出:
213151541243213
其实这题我开始是用hash做的,但是错了,后来用的沈队叫我的map做的,算是我map的一个模板吧。
代码:
#include<iostream> #include<cstdio> #include<map> #include<cstdlib> #include<cstring> #include<algorithm> #define ll long long #define il inline #define db double #define max(a,b) ((a)>(b)?(a):(b)) using namespace std; map<string,int>SS; int times[10000045]; char ch[145]; int ans; char hzr[145]; int p=31,t=10000007; int main() { freopen("steam.in","r",stdin); freopen("steam.out","w",stdout); int n,m; cin>>n>>m; int len; for(int i=1;i<=m;i++) { scanf("%s",ch); if(i==1) len=strlen(ch); if(SS.count(ch)==0) SS[ch]=1; else { SS[ch]++; if(SS[ch]>ans) { ans=SS[ch]; for(int j=0;j<len;j++) hzr[j]=ch[j]; } } } printf("%s\n",hzr); return 0; }
PEACE