P1781 宇宙总统

1.题目介绍

题目描述

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

输入格式

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

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

输出格式

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

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

样例 #1

样例输入 #1

5
98765
12365
87954
1022356
985678

样例输出 #1

4
1022356

提示

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

1n20

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 @   DawnTraveler  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示