站外题求助
  • 板块学术版
  • 楼主AstraGrace
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/12/24 20:51
  • 上次更新2024/12/25 12:48:01
查看原帖
站外题求助
1386083
AstraGrace楼主2024/12/24 20:51

本蒟蒻代码

#include<bits/stdc++.h>
using namespace std;
int a[10],mb,ys,n,mins=0,maxn=0;
bool ans[20],tmp[20],reject;
void solve(int x){
    while(x){
        a[++n]=x%10; 
        mins+=x%10;
        x/=10;
    }
    reverse(a+1,a+n+1);
}
void dfs(int cur,int sum,int num){
    if(cur==n){
        sum+=num;
        if(sum>mb) return ;
        if(sum>maxn){
            maxn=sum;
            memcpy(ans,tmp,sizeof(tmp));
            reject=false;
        }
        else if(sum==maxn) reject=true;
        return ;
    }
    tmp[cur]=true;
    dfs(cur+1,sum+num,a[cur+1]);
    tmp[cur]=false;
    dfs(cur+1,sum,num*10+a[cur+1]);
}
int main(){
    while(cin>>mb>>ys&&(mb||ys)){
        memset(tmp,false,sizeof(tmp));
        memset(ans,false,sizeof(ans));
        reject=false;
        mins=n=maxn=0;
        solve(ys);
        if(mb==ys) printf("%d %d",mb,ys);
        else if(mins>mb) printf("error");
        else{
            dfs(1,0,a[1]);
            if(reject==true) printf("reject");
            else{
                printf("%d ",maxn);
                for(int i=1; i<n; i++){
                    if(ans[i]) printf("%d ",a[i]);
                    else printf("%d",a[i]);
                }
                printf("%d",a[n]);
            }
        }
        printf("\n");
    }
    return 0;
}

WA,20分

2024/12/24 20:51
加载中...