P1781 【宇宙总统】

2018-02-01 10:42:00


这道题的思路有两个:

1.如果位数不等,肯定是位数大的票数多

2.如果位数相等,for循环比较每一位的大小

然后用万能的sort将最大的放在第一个位置,直接输出第一个就好了

代码

#include<cmath>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<set>
#include<stack>
#include<deque>
#include<queue>
#include<vector>
#include<algorithm>
#include<map>
#include<iomanip>
using namespace std;
int n;
struct work {//结构体 
    string piao;//票数 
    int wei;//位数 
    int sunx;//顺序 
} vis[10005];
bool is_sort(work a,work b) {
    if(a.wei!=b.wei)return a.wei>b.wei;//如果位数不等,肯定是位数多的大一些 
    if(a.wei==b.wei){//如果位数相等,比较每一位的大小 
        for(int i=1;i<=a.wei;++i){
            int kk=a.piao[i]-'0';
            int mm=b.piao[i]-'0';
            if(kk==mm)continue;//如果相等就直接比较下一位 
            else return kk>mm;
        }
    } 
}
int main() {
//  freopen("ex.txt","w",stdout);
    scanf("%d",&n);
    for(int i=1; i<=n; ++i) {
        cin>>vis[i].piao;
        vis[i].wei=vis[i].piao.length();
        vis[i].sunx=i;
    }
    sort(vis+1,vis+1+n,is_sort);//将最大的放在第一个,可以直接输出第一个了 
    cout<<vis[1].sunx<<endl<<vis[1].piao<<endl;
    return 0;
}