7-7 选民投票 STL
7-7 选民投票
编程统计候选人的得票数。有若干位候选人(n<=10),候选人姓名从键盘输入(候选人姓名不区分大小写,姓名最长为9个字节),若干位选民,选民每次输入一个得票的候选人的名字(姓名最长为9个字节),若选民输错候选人姓名,则按废票处理。程序自动统计各候选人的得票结果,并按照得票数由高到低的顺序排序。最后输出各选票人得票结果和废票信息。
输入格式:
先输入候选人人数n和n名候选人姓名,再输入选民人数m和m位选民的选票。
输出格式:
先根据选票结果由高到低输出各候选人得票结果,再根据废票情况输出废票信息(换行后,输出提示信息“invalid vote:”,再输出废票信息)。
输入样例1:
3
zhang
li
wang
9
Wang
Zhang
zhuang
LI
Liao
ZHANG
WANG
Wang
wang
输出样例1:
wang:4
zhang:2
li:1
invalid vote:
zhuang
Liao
输入样例2:
2
liu
yang
5
Liu
liu
YANG
yang
Liu
输出样例2:
liu:3
yang:2
用STL瞎模拟就行了
#ifdef debug
#include <time.h>
#endif
#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#define MAXN ((int)1e5+7)
#define ll long long int
#define INF (0x7f7f7f7f)
#define fori(lef, rig) for(int i=lef; i<=rig; i++)
#define forj(lef, rig) for(int j=lef; j<=rig; j++)
#define fork(lef, rig) for(int k=lef; k<=rig; k++)
#define QAQ (0)
using namespace std;
#define show(x...) \ do { \ cout << "\033[31;1m " << #x << " -> "; \ err(x); \ } while (0)
void err() { cout << "\033[39;0m" << endl; }
template<typename T, typename... A>
void err(T a, A... x) { cout << a << ' '; err(x...); }
namespace FastIO{
char print_f[105];
void read() {}
void print() { putchar('\n'); }
template <typename T, typename... T2>
inline void read(T &x, T2 &... oth) {
x = 0;
char ch = getchar();
ll f = 1;
while (!isdigit(ch)) {
if (ch == '-') f *= -1;
ch = getchar();
}
while (isdigit(ch)) {
x = x * 10 + ch - 48;
ch = getchar();
}
x *= f;
read(oth...);
}
template <typename T, typename... T2>
inline void print(T x, T2... oth) {
ll p3=-1;
if(x<0) putchar('-'), x=-x;
do{
print_f[++p3] = x%10 + 48;
} while(x/=10);
while(p3>=0) putchar(print_f[p3--]);
putchar(' ');
print(oth...);
}
} // namespace FastIO
using FastIO::print;
using FastIO::read;
int n, m, Q, K;
std::map<string, int> mp;
std::map<string, string> mp2;
//std::set<string> fp;
std::vector<string> fp;
#define CH(x) ((x>='a' && x<='z') ? x : x-'A'+'a')
int main() {
#ifdef debug
freopen("test", "r", stdin);
clock_t stime = clock();
#endif
cin >> n;
string str;
while(n--) {
cin >> str;
string tmp = str;
for(int i=0; i<(int)tmp.length(); i++)
tmp[i] = CH(tmp[i]); //全部转小写
mp[tmp] = 0;
mp2[tmp] = str;
}
cin >> m;
while(m--) {
cin >> str;
string tmp = str;
for(int i=0; i<(int)tmp.length(); i++)
tmp[i] = CH(tmp[i]);
if(mp.find(tmp) == mp.end())
fp.push_back(str);
else
mp[tmp] ++;
}
vector<pair<int, string> > vec;
for(auto it : mp)
vec.push_back({ it.second, mp2[it.first]} );
sort(vec.begin(), vec.end(), greater<pair<int, string> >());
for(auto it : vec)
cout << it.second << ":" << it.first<< endl;
if(fp.size())
cout << "\ninvalid vote:" << endl;
for(auto s : fp) cout << s << endl;
#ifdef debug
clock_t etime = clock();
printf("rum time: %lf 秒\n",(double) (etime-stime)/CLOCKS_PER_SEC);
#endif
return 0;
}