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;
}

上午写的题解,下午看了一下,确实很麻烦,比如bijiao函数就是很low的那个中,可以用x[i][j]代表位数虽然这似乎是个二维数组x[i]代表这个数,[j]是某一位位数,但这样有些高难度颠覆思维,所以不习惯的dalao们可以用我这种方法 当然你得不嫌麻烦