P1781 【宇宙总统】

likztime

2018-02-01 10:42:00

Solution

这道题的思路有两个: # 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; } ```