题目链接:记票统计_牛客题霸_牛客网
注意点:
1.用的暴力求解,坑也不少,在遍历循环的时候要注意边界条件
2.用pair类型的vector去存候选人的名字,票数初始化为0
3.时间复杂度时 O(mn),空间复杂度O(1);因为票数为常量不超过100
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n;
int tol = 0;
string people;
while(cin >> n){
vector<pair<string,int> > name(n);
//注意这里的边界时小于n,否则会越界
for(int i = 0; i < n; ++i ){
cin >> people;
//记录候选人票数,初始为0
name[i] = make_pair(people,0);
}
cin >> n;
for(int i = 0; i< n; ++i){
cin >> people;
for(int j = 0; j < name.size(); ++j){
if(people == name[j].first){
//有名字的候选人有选票
name[j].second++;
}
}
}
//统计票数
for(int i = 0; i < name.size(); ++i){
cout << name[i].first <<" : "<< name[i].second <<endl;
tol +=name[i].second;
}
cout << "Invalid : " << n - tol << endl;
}
return 0;
}