华师一附中OI组

标题: P1781 宇宙总统 [打印本页]

作者: 倚窗倾听风吹雨    时间: 2018-7-22 11:05
标题: P1781 宇宙总统
本帖最后由 倚窗倾听风吹雨 于 2018-7-22 11:06 编辑

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



作者: admin    时间: 2019-3-16 15:11
因为数字太大,不能用int long long float等数据类型来处理,只能使用 string来读入和处理,那么每个数都当一个字符串来读入,比较大小就不是简单的按字符串比较大小,而应该先比较长度,再比较字典序。
  1. #include  <iostream>
  2. using namespace std;
  3. string s,maxs;
  4. int n,maxi,i,l,maxl;
  5. int main()
  6. {
  7.     maxs="";maxi=0;maxl=0;
  8.     cin>>n;
  9.     for (i=1;i<=n;i++)
  10.     {
  11.         cin>>s;
  12.         l=s.size();
  13.         bool b1=l>maxl; ///长度大的数字比较大
  14.         bool b2=(l==maxl) && (s>maxs); ///长度相等的话字典序
  15.         if (b1||b2) {maxs=s;maxl=l;maxi=i;}

  16.     }
  17.     cout<<maxi<<endl<<maxs;
  18.     return 0;
  19. }

复制代码



作者: admin    时间: 2020-2-3 20:47
  1. #include <iostream>
  2. using namespace std;
  3. int i; ///x-票数  i-第几个人
  4. int maxi;///maxxx-最大票数  i-最多票的那个人
  5. string x,maxx;
  6. int main()
  7. {
  8.         int n;cin>>n;
  9.         maxx="0"; ///不可能得最小值 任何数都比他大
  10.         for (i=1; i<=n; i++)
  11.         {
  12.                 cin>>x;
  13.                 int l1=x.size();
  14.                 int l2=maxx.size();
  15.                 bool b1=l1>l2;
  16.                 bool b2=(l1==l2) && (x>maxx);
  17.                 if (b1||b2)
  18.                 {
  19.                         maxx=x;
  20.                         maxi=i;
  21.                 }  ///两个都要改
  22.         }
  23.         cout<<maxi<<endl<<maxx<<endl;
  24.         return 0;
  25. }
复制代码





欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2