华为OJ(记票统计)

题目:记票统计

描述

请实现接口:

unsigned int  AddCandidate (char* pCandidateName);
功能:设置候选人姓名
输入: char* pCandidateName 候选人姓名
输出:无
返回:输入值非法返回0,已经添加过返回0 ,添加成功返回1

 

Void Vote(char* pCandidateName);
功能:投票
输入: char* pCandidateName 候选人姓名
输出:无
返回:无


unsigned int  GetVoteResult (char* pCandidateName);

功能:获取候选人的票数。如果传入为空指针,返回无效的票数,同时说明本次投票活动结束,释放资源
输入: char* pCandidateName 候选人姓名。当输入一个空指针时,返回无效的票数

输出:无
返回:该候选人获取的票数

 

void Clear()

// 功能:清除投票结果,释放所有资源
// 输入:
// 输出:无
// 返回

 

知识点 查找
运行时间限制 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
先给出基于STL的实现,考虑到候选人不需要排序,这里使用unordered_map,代码如下:

#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;
}

丫的!冒号前后竟然各有一个空格,害我提交了好几次,最后发现问题。真是一点都不智能呢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值