测评记录
#include<bits/stdc++.h>
using namespace std;
int n,sum,res[15];
bool flag=false;
bool check(int k,int n){
for(int i=1;i<=n;i++){
if(!k)return false;
k=k%2?k/2:k/2-1;
}
return true;
}
void dfs(int a[],int len){
if(len==n){
int v[15];
for(int i=1;i<=n;i++)v[i]=0;
for(int i=1;i<=n;i++){
if(v[a[i]]||a[i]<=0)return;
v[a[i]]=1;
}
for(int i=1;i<=n;i++){
if(a[i]<res[i]){
for(int i=1;i<=n;i++)res[i]=a[i];
return;
}
else if(a[i]>res[i])return;
}
return;
}
int b[15];
for(int i=1;i<a[1];i++){
if(!check(i,n-len-1)||!check(a[1]-i,n-len-1)){
if(i>ceil(a[1]*0.5))break;
else continue;
}
b[1]=i;
bool flag=false;
for(int j=2;j<=len+1;j++){
int tep=a[j-1]-b[j-1];
if(!check(tep,n-len-1)){
flag=true;break;
}
b[j]=tep;
}
if(flag)continue;
dfs(b,len+1);num++;
}
}
int main(){
cin>>n>>sum;
for(int i=1;i<=n;i++)res[i]=100;
int a[15];a[1]=sum;
if(!check(sum,n-1))return 0;
dfs(a,1);
for(int i=1;i<=n;i++)cout<<res[i]<<' ';
}