洛谷 P1781 宇宙总统
题目:洛谷 P1781 宇宙总统: https://www.luogu.org/problemnew/show/P1781
题目背景
宇宙总统竞选
题目描述
地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。
输入输出格式
输入格式:president.in
第一行为一个整数n,代表竞选总统的人数。
接下来有n行,分别为第一个候选人到第n个候选人的票数。
输出格式:president.out
共两行,第一行是一个整数m,为当上总统的人的号数。
第二行是当上总统的人的选票。
输入输出样例
输入样例#1:
5 98765 12365 87954 1022356 985678
输出样例#1:
4 1022356
说明
票数可能会很大,可能会到100位数字。
n<=20
这道题乍眼一看是高精度。
但实际上我们可以避免高精度的麻烦。
首先,对于每一次输入,我们将它的长度与已知最长对比。
长度较长的一定是较大的那个数。
如果两者长度相同(len),我们从首位一直向末尾对比,第一次出现在同一数位下的不等,数位上大的数一定大。
所以可以跳出循环。
这样我们不用高精就可以判断两个数的大小关系。
AC代码:
1 // 2 #include <bits/stdc++.h> 3 using namespace std; 4 typedef long long ll; 5 #define ri register ll 6 7 ll n,t; 8 string s1,s2; 9 10 signed main() 11 { 12 ios::sync_with_stdio(0),cin.tie(0); 13 cin>>n; 14 for(ri i=1;i<=n;i++) 15 { 16 cin>>s2; 17 if(s2.length()<s1.length()) continue; 18 if(s2.length()>s1.length()) 19 { 20 s1=s2; 21 t=i; 22 } 23 else if(s2.length()==s1.length()) 24 { 25 for(ri j=0;j<=s2.length()-1;j++) 26 { 27 if(s1[j]==s2[j]) continue; 28 if(s1[j]<s2[j]) 29 { 30 s1=s2; 31 t=i; 32 } 33 break; 34 } 35 } 36 } 37 cout<<t<<'\n'<<s1; 38 return 0; 39 } 40 //