比赛 |
国庆欢乐赛2 |
评测结果 |
TAWAWWWWTTTTTTTTTTTT |
题目名称 |
毛一琛 |
最终得分 |
10 |
用户昵称 |
梧叶已同秋雨去 |
运行时间 |
40.840 s |
代码语言 |
C++ |
内存使用 |
3.49 MiB |
提交时间 |
2025-10-04 11:58:41 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,a[35],k[35],cnt,e,k2[35],cnt2;
unsigned long long jie[25],ans;long long sum;
bool cmp(unsigned long long a,unsigned long long b){
return a<b;
}
void dfs2(int t){
if(t==cnt+1){
if(sum==0){
e++;
// for(int i=1;i<=cnt2;i++){
// cout<<k2[i]<<" ";
// }cout<<endl;
}
return;
}
for(int i=1;i<=2;i++){
if(i==1){
dfs2(t+1);
}else{
sum-=k[t];
dfs2(t+1);
sum+=k[t];
}
}
}
bool check(){
// for(int i=1;i<=cnt;i++){
// cout<<k[i]<<" ";
// }cout<<"\n";
e=0;
if(cnt==0)return 0;
if(cnt==1){
return 0;
}
if(cnt==2){
if(k[1]==k[2])return 1;
else return 0;
}
sort(k+1,k+cnt+1,cmp);
sum=0;
for(int i=1;i<=cnt;i++){
sum+=k[i];
}
if(sum%2==1)return 0;
sum/=2;
if(!sum)return 0;
// cout<<"kashi:"<<sum<<endl;
dfs2(1);
// cout<<"e:"<<e<<endl;
return e;
}
void dfs(int t){
if(t==n+1){
if(check()==1){
ans++;
}
return;
}
for(int i=1;i<=2;i++){
if(i==1){
dfs(t+1);
}else{
cnt++;
k[cnt]=a[t];
dfs(t+1);
k[cnt]=0;
cnt--;
}
}
}
int main(){
freopen("subsets.in","r",stdin);
freopen("subsets.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(1);
cout<<ans;
return 0;
}