马蜂良好,样例已过,悬6关求调埃及乘法 WA,
查看原帖
马蜂良好,样例已过,悬6关求调埃及乘法 WA,
777756
UFOI楼主2023/8/11 10:58
#include<bits/stdc++.h>
using namespace std;
int wei[17]={65536,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1},na,nb,wa[17],wb[17],naa,nbb,l,r,reca,recb,maxa,maxb,le,g,ans;
bool aa[17],bb[17];
string a,b,c,swei[17]={"|||||| nnn 99999 88888 rrrrrr","|||||||| nnnnnn 9999999 88 rrr","|||| nnnnnnnn 999 888888 r","|| nnnnnnnnn 9 88888888","|||||| nnnnnnnnn 8888","|||||||| nnnn 88","|||| nn 8","|| n 99999","|||||| nnnnn 99","|||||||| nn 9","|||| nnnnnn","|| nnn","|||||| n","||||||||","||||","||","|"};
char p[6]={' ','|','n','9','8','r'};
int main(){
    while(getline(cin,a)&&getline(cin,b)){
        na=0,nb=0;
        l=0,r=0;
        maxa=0,maxb=0;
        memset(aa,0,sizeof aa);
        memset(bb,0,sizeof bb);
        for(int i=0;i<a.size();i++){
            if(a[i]=='|') na+=1;
            if(a[i]=='n') na+=10;
            if(a[i]=='9') na+=100;
            if(a[i]=='8') na+=1000;
            if(a[i]=='r') na+=10000;
        }
        for(int i=0;i<b.size();i++){
            if(b[i]=='|') nb+=1;
            if(b[i]=='n') nb+=10;
            if(b[i]=='9') nb+=100;
            if(b[i]=='8') nb+=1000;
            if(b[i]=='r') nb+=10000;
        }
        if(na>=nb){
            swap(na,nb);
            c=a;
            b=c;
            a=b;
        }
        naa=na,nbb=nb;
        for(int i=0;i<17;i++){
            if(naa>=wei[i]){
                wa[++l]=wei[i];
                aa[i]=1;
                if(!maxa) maxa=i;
                naa-=wei[i];
            }
            if(nbb>=wei[i]){
                wb[++r]=wei[i];
                bb[i]=1;
                if(!maxb) maxb=i;
                nbb-=wei[i];
            }
            if(naa==0) break;
        }
        for(int i=16;i>=maxa;i--){
            reca=swei[i].size();
            cout<<swei[i];
            if(aa[i]){
                cout<<" *";
                reca+=2;
            }
            for(int j=reca+1;j<=34;j++) cout<<" ";
            if(i<16) nb*=2;
            g=nb;
            le=0;
            recb=0;
            while(g){
                le++;
                for(int j=1;j<=g%10;j++){
                    cout<<p[le];
                    recb++;
                }
                if(g%10) cout<<" ";
                recb++;
                g/=10;
            }
            cout<<endl;
            if(aa[i]) ans+=nb;
        }
        cout<<"The solution is: ";
        le=0;
        while(ans){
            le++;
            for(int j=1;j<=ans%10;j++){
                cout<<p[le];
            }
            if(ans%10) cout<<" ";
            ans/=10;
        }
        cout<<endl;
    }
}
2023/8/11 10:58
加载中...