rt,听说爆搜能过,但是赛时TLE。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,cntc;
int a[15],t[15];
map<int,bool> vis;
void dfs(int x,int ans){
if(x==n+1){
vis[ans] = 1;
return;
}
if(t[x]==2){
dfs(x+1,ans^a[x]);
return;
}
dfs(x+1,ans^a[x]);
t[x] = 1;
for(int i=x+1;i<=n;i++){
if(t[i]!=1){
int tmp = t[i];
t[i] = 2;
a[i]+=a[x];
dfs(x+1,ans);
a[i]-=a[x];
t[i] = tmp;
}
}
t[x] = 0;
}
signed main(){
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
}
dfs(1,0);
int cnt = 0;
for(auto x:vis){
cnt++;
// cout << x.first << endl;
}
cout << cnt;
return 0;
}