P1781 宇宙总统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
输入格式
第一行为一个整数 𝑛n,代表竞选总统的人数。
接下来有 𝑛n 行,分别为第一个候选人到第 𝑛n 个候选人的票数。
输出格式
共两行,第一行是一个整数 𝑚m,为当上总统的人的号数。
第二行是当上总统的人的选票。
说明/提示
票数可能会很大,可能会到 100100 位数字。
分析:
由于数字很大,使用字符串来处理。
建立结构体来存储每个候选人的票数、位次信息。
struct per{
string score; //存储票数
int index; //存储位次
int len; //存储score的长度
}arr[N];
自定义比较函数
bool cmp(per a1,per a2){
if(a1.len != a2.len){
return a1.len > a2.len; //返回较大数
}
else{
int n = a1.len;
for(int i =0;i<n;i++){
int weight1 = a1.score[i] - '0';
int weight2 = a2.score[i] - '0';
if(weight1 == weight2){
continue; //如果当前位置数字相同,则跳过本次循环进行下一次比较
}
return weight1 > weight2; //输出最多的票数,此处降序排列
}
}
}
附上代码:
#include<iostream>
#include<algorithm>
using namespace std;
int n;
const int N = 25;
struct per{
string score;
int index;
int len;
}arr[N];
bool cmp(per a1,per a2){
if(a1.len != a2.len){
return a1.len > a2.len;
}
else{
int n = a1.len;
for(int i =0;i<n;i++){
int weight1 = a1.score[i] - '0';
int weight2 = a2.score[i] - '0';
if(weight1 == weight2){
continue;
}
return weight1 > weight2;
}
}
}
int main()
{
cin >> n;
for(int i=0;i<n;i++){
cin >>arr[i].score;
arr[i].index = i+1;
arr[i].len = arr[i].score.length();
}
sort(arr,arr+n,cmp);
cout << arr[0].index << endl;
cout << arr[0].score;
return 0;
}
注:本人蒻媾,大佬勿喷ovo!