一本通1211 全排列应用

[http://ybt.ssoier.cn:8088/problem_show.php?pid=1211]()

复制代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <map>
#include <queue>
#include <set>
#include <iterator>
#include <vector>
#define maxn 10000005
typedef long long ll;
using namespace std;

int N,k;
int a[maxn];
set<int> s;

bool dfs(int n,ll sum,int num){
    if(num==N){
        sum=sum+n;
        //cout<<" sum "<<sum<<endl;
        s.insert(abs(sum));
        return true;
    }else{
        sum=sum+n;
        num=num+1;//num++不行 
        dfs(a[num],sum,num);
        dfs(-a[num],sum,num);
    }
    
}
int main(){
    cin>>N>>k;
    for(int i=1;i<=N;i++){
        cin>>a[i];
    }
    
    dfs(a[1],0,1);
    dfs(-a[1],0,1);
    
    int f=1;
    set<int>::iterator it;
    for(it=s.begin();it!=s.end();it++){
        if((*it)%k==0){
            cout<<"YES";
            f=0;
            break; 
        }
        
    }
    if(f==1){
        cout<<"NO";
    }

    return 0;
}
复制代码

 

posted @   lwx_R  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示