(2012-07-15 20:58:23)
SOJ3076: http://cstest.scu.edu.cn/soj/problem.action?id=3076
这道题官方的算法是Trie树,但是巧妙地使用map还是可以AC滴~
代码:
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
int n;
int i;
while(scanf("%d",&n)==1)
{
map<string,int>xiaoye;
char s[305];
for(i=1;i<=n;i++)
{
scanf("%s",s);
int result=xiaoye[s];
printf("%d\n",result);
xiaoye[s]=result+1;
}
}
return 0;
}
附上map的基础用法:
map<string,int>xiaoye;
//第一中插入方法
xiaoye["xello"]=1;
xiaoye["hi"]=2;
xiaoye["hi"]=3;//这个将自动覆盖。
//第二种插入方法
pair<string,int>s;
s.first="xiao";
s.second=5;
xiaoye.insert(s);
//第一种查询方法
int x=xiaoye["hello"];//不存在时,将临时创建。x值为0.
cout<<x<<endl;
//第二种查询方法
map<string,int>::iterator it=xiaoye.find("xiao");
cout<<it->second<<endl;
//
cout<<xiaoye.begin()->second<<endl;
xiaoye.clear();