poj1416

来源:互联网 发布:淘宝店分析 编辑:程序博客网 时间:2024/05/01 21:31
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>using namespace std;int N,K;int get(int _){int i=10;int j=1;while(1){if(i>_)return j;i*=10;j++;}}int H[7];void getn(int h,int n){ int i=0;do{H[i]=h%10;h/=10;i++;}while(h);for(int j=0;j<n/2;j++){int kk=H[j];H[j]=H[n-1-j];H[n-1-j]=kk;}}int temp[7];int  vis[1000004];int Ans;int ans[7];void dfs(int i,int n){int sum=0;for(int j=0;j<6;j++)if(temp[j]!=-1){sum=temp[j]+sum;}if(sum>N)return;if(i>=n){ if(sum<=N){vis[sum]++;if(sum<Ans)return;if(sum>Ans){Ans=sum;for(int j=0;j<6;j++)ans[j]=temp[j];}} return;}int num=0;for(int k=0;k<6;k++)if(temp[k]!=-1){num++;}else break;temp[num]=H[i];dfs(i+1,n);temp[num]=-1;if(num==0)return;else {temp[num-1]=temp[num-1]*10+H[i];dfs(i+1,n);temp[num-1]=temp[num-1]/10;//temp[num]=-1;} }int main(){while(scanf("%d%d",&N,&K)==2&&N+K){ if(N==K){printf("%d %d\n",N,N);continue;}memset(vis,0,sizeof(vis));memset(temp,-1,sizeof(temp));memset(ans,-1,sizeof(ans));Ans=-1;int n=get(K);getn(K,n);dfs(0,n);if(Ans==-1)printf("error\n");else {if(vis[Ans]>1)printf("rejected\n");    else {printf("%d",Ans);for(int i=0;i<6;i++)if(ans[i]!=-1)printf(" %d",ans[i]);else break;printf("\n");}}}return 0;}
0 0
原创粉丝点击