狂T求条2关
查看原帖
狂T求条2关
1063855
xu_zhihao楼主2025/1/26 21:34

这不应该是 O(n!×小常数)O(n! \times 小常数) 吗,为啥 T 14个点qwq

#include<bits/stdc++.h>
using namespace std;
long long b[20],a[20];
long long cnt=0;
int n;
unordered_map<long long,bool>mp;
long long sum;
void dfs1(short len){
	if(len==n+1){
		if(!mp[sum]){
			mp[sum]=1;
			cnt++;
		}
		return;
	}
	sum^=a[len];
	dfs1(len+1);
	sum^=a[len];
	long long p=a[len];
	for(int i=len+1;i<=n;i++){
		a[i]+=p;
		a[len]=0;
		dfs1(len+1);
		a[len]=p;
		a[i]-=p;
	}
}
void dfs2(short len){
	if(len==0){
		if(!mp[sum]){
			mp[sum]=1;
			cnt++;
		}
		return;
	}
	sum^=a[len];
	dfs2(len-1);
	sum^=a[len];
	long long p=a[len];
	for(int i=len-1;i>=1;i--){
		a[i]+=p;
		a[len]=0;
		dfs2(len-1);
		a[len]=p;
		a[i]-=p;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>b[i];
		a[i]=b[i];
	}
	dfs1(1);
	cout<<cnt;
    return 0;
}
2025/1/26 21:34
加载中...