【洛谷 P1781】宇宙总统 题解(高精度+结构体排序)

简介: 在宇宙总统竞选中,需计算得到最高票者。程序接收$n$($1\leq n\leq 20$)个候选人及其票数,使用自定义比较器`cmp`对结构体数组`vote`按票数长度排序。样例输入5人,票数分别为98765、12365、87954、1022356、985678,输出显示编号为4的候选人(票数1022356)获胜。代码中,结构体`S`包含候选人ID和票数字符串,通过`sort`函数及`cmp`函数按票数长度降序排列,输出首位即为胜者。

宇宙总统

题目描述

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

输入格式

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

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

输出格式

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

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

样例 #1

样例输入 #1

5
98765
12365
87954
1022356
985678

样例输出 #1

4
1022356

提示

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

$1 \leq n \leq 20$

思路

给sort函数传入自定义比较器,对结构体进行排序。

AC代码

#include <iostream>
#include <algorithm>
#define AUTHOR "HEX9CF"
using namespace std;

const int maxn = 100005;

struct S {
   
    int id;
    string s;
}vote[maxn];

bool cmp(struct S x, struct S y){
   
    if(x.s.length() == y.s.length()){
   
        int i = 0;
        while(x.s[i] == y.s[i]){
   
            i++;
        }
        return x.s[i] > y.s[i];
    }
    return x.s.length() > y.s.length();
}

int main() {
   
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) {
   
        cin >> vote[i].s;
        vote[i].id = i + 1;
    }
    sort(vote, vote + n, cmp);
    cout << vote[0].id << endl << vote[0].s << endl;
    return 0;
}
目录
相关文章
|
1月前
|
C语言
快速幂+高精乘(填坑)洛谷1226+1045
快速幂+高精乘(填坑)洛谷1226+1045
|
1月前
数字游戏2(数位dp)
数字游戏2(数位dp)
25 0
|
8月前
|
算法 测试技术 C++
C++算法:美丽塔O(n)解法单调栈
C++算法:美丽塔O(n)解法单调栈
|
1月前
|
存储
每日一题啦(● ̄(エ) ̄●)(尼克切斯定理,等差数列)
每日一题啦(● ̄(エ) ̄●)(尼克切斯定理,等差数列)
13 0
|
11月前
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
|
8月前
|
算法
华为机试HJ76:尼科彻斯定理
华为机试HJ76:尼科彻斯定理
7-293 鸡兔同笼
7-293 鸡兔同笼
71 0
|
算法 JavaScript 前端开发
日拱算法:解两道“杨辉三角”题
什么是“杨辉三角”,想必大家并不陌生~~ 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
|
机器人
UPC—— 最勇敢的机器人(并查集+分组背包)
UPC—— 最勇敢的机器人(并查集+分组背包)
63 0
E - 鸡兔同笼
一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。 Input 一行,一个正整数a (a < 32768)。
1182 0