题目:记票统计
描述 | |
---|---|
知识点 | 查找 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入候选人的人数,第二行输入候选人的名字,第三行输入投票人的人数,第四行输入投票。 |
输出 | 每行输出候选人的名字和得票数量。 |
样例输入 | 4 A B C D 8 A B C D E F G H |
样例输出 | A : 1 B : 1 C : 1 D : 1 Invalid : 4 |
#include<iostream>
#include<vector>
#include<unordered_map>
#include<string>
using namespace std;
int main()
{
int n,cnt_invalid=0;
string s;
unordered_map<string,int> smap;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s;
smap[s];
}
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s;
if(smap.count(s))
++smap[s];
else
cnt_invalid++;
}
for(unordered_map<string,int>::iterator iter=smap.begin();iter!=smap.end();iter++)
cout<<iter->first<<":"<<iter->second<<endl;
cout<<"Invalid:"<<cnt_invalid<<endl;
//system("pause");
return 0;
}
但OJ上提交后编译未通过,可能是不允许使用unordered_map,下面是用结构体实现:
#include<iostream>
#include<string>
using namespace std;
struct cdd
{
string name;
int count;
};
int main()
{
int n,m,cnt_invalid=0;
string s;
cin>>n;
cdd * candidate=new cdd[n];
for(int i=0;i<n;i++)
{
cin>>s;
candidate[i].name=s;
candidate[i].count=0;
}
cin>>m;
int flag;
for(int i=0;i<m;i++)
{
cin>>s;
flag=0;
for(int j=0;j<n;j++)
if(s==candidate[j].name)
{
flag=1;
++candidate[j].count;
}
if(!flag)
cnt_invalid++;
}
for(int i=0;i<n;i++)
cout<<candidate[i].name<<" : "<<candidate[i].count<<endl;
cout<<"Invalid : "<<cnt_invalid<<endl;
delete [] candidate;
//system("pause");
return 0;
}
丫的!冒号前后竟然各有一个空格,害我提交了好几次,最后发现问题。真是一点都不智能呢!