描述
某场选举一共有 n 位候选人入选,候选人的名字均由大写字母构成,且互不相同,使用 c1,c2,...,cn表示。
选举结束后,统计了 m 张选票,每张选票上均写有候选人的名字,使用 v1,v2,...,vm 表示。
求解每个候选人获得的票数。特别地,如果某张选票上的候选人名字不在候选名单中,则该票视为无效票。你需要同时统计无效票的数量。
输入描述:
第一行输入一个整数 n(1≦n≦100)代表候选人数。
第二行输入 n 个长度为 1≦len(ci)≦10、仅由大写字母构成的字符串 c1,c2,...,cn,代表候选人的名字。保证候选人的名字互不相同。
第三行输入一个整数 m(1≦m≦100)代表投票人数。
第四行输入 m 个长度为 1≦len(vi)≦10、仅由大写字母构成的字符串 v1,v2,...,vm,代表投票内容。
输出描述:
对于每一位候选人,新起一行。先输出其名字,随后输出一个空格、一个冒号、一个空格作为间隔,最后输出其获得的票数。形如 ci : numbersi,其中 ci 是候选人的名字,numbersi 是候选人的票数。
最后一行以相同的格式输出无效票的数量。形如 Invalid : numbers,其中 numbers 是无效票的数量。
示例1
输入:
4
A B C D
8
A D E CF A GG A B
输出:
A : 3
B : 1
C : 0
D : 1
Invalid : 3
说明:
在这个样例中,E,CF,GG三张票是无效的。
cpp
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
int n;
while(cin >> n){
vector<pair<string, int> > name(n);
string s;
for(int i = 0; i < n; i++){
cin >> s;
name[i] = make_pair(s, 0); //记录候选人的名字,初始票数为0
}
cin >> n;
for(int i = 0; i < n; i++){
cin >> s;
for(int i = 0; i < name.size(); i++) //只查找到有这个候选人的再计票
if(s == name[i].first)
name[i].second++;
}
int valid = 0; //统计合法票数
for(int i = 0; i < name.size(); i++){ //遍历候选人的名字,输出其票数
cout << name[i].first << " : " << name[i].second << endl;
valid += name[i].second;
}
cout << "Invalid : " << n - valid << endl; //总票数减去合法票数就是非法票数
}
}