这不应该是 O(n!×小常数) 吗,为啥 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;
}