P1781 宇宙总统
来自 魔芋 蒟蒻的题解, 大佬勿喷~~
有点犯迷糊,于是我的code有些麻烦,但还是很棒啦!看不懂的地方可以问我哦~
这里要用到高精度,题解中很多dalao用了string,当然本dalao蒟蒻也是呀!首先比较位数,如果最高位数只有一个,直接输出,反之,逐位比较,可以直接比较ascii码,也可以转换成int类型,总之,我你们开心就好呀!
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>//库库库
using namespace std;
int p[22], n, q[22], qk[22], pk[22], aa, k=0, maxn;//这里有点多,需要记一下
//p->号数, q->票数, pk->最高票位数候选人的号数(可能有多个最高票位数候选人), qk->pk相应的票数, aa->总统的号数, k->计数器,最高位票数的人数 maxn->最高票的位数
string a[22];
string Maxn;//最高票数
void bijiao(int i){//比较
string x=a[i], y=a[i-1];
for(int j=0; j<maxn; j++){
int xx=x[j]-48, yy=y[j]-48;//48是字符0的ascii码, 可以直接减'0'
if(xx>yy) {Maxn=x; aa=i; return;}
if(xx<yy) return;//判断出大小后返回
}
}
int main(){
cin>>n;
for(int i=1; i<=n; i++){
cin>>a[i];
q[i]=a[i].size();//长度
p[i]=i;//获取号数
if(i==1) maxn=q[i];
else
if(q[i]>maxn) maxn=q[i];//获取最高票数的位数
}
for(int i=1; i<=n; i++)
if(q[i]==maxn) k++, qk[k]=q[i], pk[k]=i;//求出最高票位数有几个
if(k==1) {cout<<pk[k]<<endl; int x=pk[k]; cout<<a[x];}//如果只有一个,输出答案
else{//如果有多个,逐位比较
Maxn=a[1];
for(int i=2; i<=k; i++)
bijiao(i);//通过比较得出最高票数
cout<<aa<<endl;
cout<<Maxn;
}
return 0;
}