P1781 宇宙总统

1.题目介绍

题目描述

地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 \(n\) 个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。

输入格式

第一行为一个整数 \(n\),代表竞选总统的人数。

接下来有 \(n\) 行,分别为第一个候选人到第 \(n\) 个候选人的票数。

输出格式

共两行,第一行是一个整数 \(m\),为当上总统的人的号数。

第二行是当上总统的人的选票。

样例 #1

样例输入 #1

5
98765
12365
87954
1022356
985678

样例输出 #1

4
1022356

提示

票数可能会很大,可能会到 \(100\) 位数字。

\(1 \leq n \leq 20\)

2.题解

2.1 字典序算法

思路

这里由于票数可能会很大,可能会到 100 位数字,甚至用long long都无法存储,所以这里考虑使用字符串存储
那么字符串之间该如何比较大小呢?这就涉及到了字典序算法:

字典序,就是按照字典中出现的先后顺序进行排序。

1、单个字符

在计算机中,25个字母以及数字字符,字典排序如下:

'0' < '1' < '2' < ... < '9' < 'a' < 'b' < ... < 'z'

比如在 python 中, '0' < '9' < 'a' < 'z' 这个表达式就会返回 True。

2、多个字符

这是单个字符的大小情况,那么如果是两个字符串比较大小呢?在计算机中,两个字符串比较大小,是按照从左到右的顺序进行比较,如果第1位相等,就比较第2位,直至有一位可以比较出大小来,则不再继续比较。

使用计算机属于来描述:

对于任意两个序列 (a,b) 和 (a’,b’),字典序定义为: (a,b) ≤ (a′,b′) 当且仅当 a < a′ 或 (a = a′ 且 b ≤ b′).

代码

#include<bits/stdc++.h>
using namespace std;
struct Candidate{
	string votes = "";
	int id;
};
bool cmp(Candidate c1, Candidate c2){
	if(c1.votes.length() != c2.votes.length()) return c1.votes.length() > c2.votes.length();
	return c1.votes > c2.votes;
}
int main(){
	int n;
	cin >> n;
	Candidate ans;
	for (int i = 0; i < n; i++){
		Candidate per;
		cin >> per.votes;
		if(cmp(per, ans)) {
			ans.votes = per.votes;
			ans.id = i + 1;	
		} 
	}
	
	cout << ans.id << endl << ans.votes; 
}
posted @ 2024-02-14 15:22  DawnTraveler  阅读(65)  评论(0编辑  收藏  举报