比赛 国庆欢乐赛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;
}