洛谷 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 //

 

 

 

posted @ 2019-06-16 11:43  敲可耐的螺旋藻  阅读(142)  评论(0编辑  收藏  举报