一本通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 @ 2022-02-22 19:56  lwx_R  阅读(39)  评论(0编辑  收藏  举报