大统领投票


第一届地球大统领开始选拔,全地球的所有生物都积极参与投票,现在已知得票结果,请输出新当选的得票数最多的地球大统领的编号和得票数。

输入:输入第一行为一个整数 N 表示参选生物数。(1 ≤ N ≤ 100)接下来 N 行,每行一个整数,表示第 i 名参选生物的票数。票数不会超过 1000位。

输出: 输出得票数最多的生物的编号和票数。

样例

1
2
3
4
3
123456799
123456789132456789123456789
11111111111111
1
2
2
123456789132456789123456789

思路:

  1. 定义一个结构体包含某生物的编号与票数,使用sort方法对结构体排序后输出,时间复杂度: $O(nlogn)$
  2. 遍历一遍所有生物,动态更新票数多的答案即可,时间复杂度: $O(n)$
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

struct node{
int num;
string score;
};

//当票数长度相同时,C++中已经重载了小于号可以直接使用进行字典顺序排序
bool cmp(const node &a, const node &b){
if(a.score.size() == b.score.size()){
return a.score > b.score;
}
return a.score.size() > b.score.size();
};

node bio[105];

int main(){
int n;
cin >> n;
for(int i = 1; i <= n; ++i){
cin >> bio[i].score;
bio[i].num = i;
}
sort(bio + 1, bio + n + 1, cmp);
cout << bio[1].num << endl << bio[1].score << endl;
return 0;
}