为啥会RE,在自己电脑上运行没问题
查看原帖
为啥会RE,在自己电脑上运行没问题
1533737
null___楼主2025/6/15 03:20

测评记录

#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]<<' ';
}
2025/6/15 03:20
加载中...