【洛谷 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;
}
目录
相关文章
|
7月前
|
C语言
快速幂+高精乘(填坑)洛谷1226+1045
快速幂+高精乘(填坑)洛谷1226+1045
|
2月前
lanqiao OJ 1447 砝码称重
lanqiao OJ 1447 砝码称重
30 1
|
2月前
lanqiao OJ 131 生命之树
lanqiao OJ 131 生命之树
32 0
|
2月前
lanqiao oj 131 生命之树
lanqiao oj 131 生命之树
27 0
|
6月前
每日练习之数学——砝码和天平
每日练习之数学——砝码和天平
29 3
|
6月前
|
人工智能 程序员 定位技术
老程序员分享:NOIP2016天天爱跑步(树上差分)
老程序员分享:NOIP2016天天爱跑步(树上差分)
31 0
|
6月前
|
存储
【洛谷 P2437】蜜蜂路线 题解(递归+记忆化搜索+高精度)
蜜蜂路线问题:蜜蜂从蜂房$m$到$n$($m&lt;n$)按数字递增爬行。给定$m$和$n$,求路线数。示例:$m=1$,$n=14$,输出$377$。100%数据$1\leq m,n\leq1000$。使用斐波那契序列优化,高精度处理大数。代码实现斐波那契存储并动态规划求解。
93 0
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
|
7月前
|
机器人
【每日一题Day343】LC2731移动机器人 | 脑筋急转弯+数学
【每日一题Day343】LC2731移动机器人 | 脑筋急转弯+数学
50 0
|
算法 JavaScript 前端开发
日拱算法:解两道“杨辉三角”题
什么是“杨辉三角”,想必大家并不陌生~~ 在「杨辉三角」中,每个数是它左上方和右上方的数的和。