Think:
1知识点:排序+题意理解
2题意:n个候选人,m个选民,两轮选举,每级选举选民根据自己对候选人的满意度进行投票,第一轮选举所有候选人参加,若有一名候选人得票超过50%,则成功竞选,不进行第二轮选举,若没有候选人在第一轮选举中得票超过50%,则由第一轮选举中的前两名参加第二轮选举。输入数据保证不会出现第一轮选举中第二名第三名票数相同的情况。
3反思:
1>理解题意时不能急于求成,需要注意题目细节
2>提高词汇积累量
3>学习简单的英语句式语法
以下为Accepted代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Node{
int id;
int num;
bool operator < (const Node &de) {
return num > de.num;
}
}rec[104], a, b;
int book[104][104];
int main(){
int T, n, m, i, j;
scanf("%d", &T);
while(T--){
scanf("%d %d", &n, &m);
for(i = 0; i < 104; i++)
rec[i].id = i, rec[i].num = 0;
for(i = 1; i <= m; i++){
scanf("%d", &book[i][1]);
rec[book[i][1]].num++;
for(j = 2; j <= n; j++)
scanf("%d", &book[i][j]);
}
sort(rec, rec+104);
a = rec[0], b = rec[1];
if(a.num > m/2)
printf("%d 1\n", a.id);
else {
a.num = 0;
b.num = 0;
for(i = 1; i <= m; i++){
for(j = 1; j <= n; j++){
if(book[i][j] == a.id){
a.num++;
break;
}
else if(book[i][j] == b.id){
b.num++;
break;
}
}
}
if(a.num > b.num) printf("%d 2\n", a.id);
else printf("%d 2\n", b.id);
}
}
return 0;
}