Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- long long int n,k,t,i,j,k1,l,sum,left,l1,o,p,right,c,f,mid,d,diff;
- cin>>t;
- for(i=1; i<=t; i++)
- {
- cin>>n>>k;
- long long int a[n+2];
- for(j=0; j<n; j++)
- {
- cin>>a[j];
- }
- o=n/2;
- p=pow(2,o);
- d=pow(2,n);
- l=0;
- l1=0;
- vector<long long int>s,s1;
- c=0;
- for(j=0; j<p; j++)
- {
- for(k1=0,sum=0; k1<o; k1++)
- {
- if(j & (1<<k1))
- {
- sum=sum+a[k1];
- }
- }
- if(sum<k)
- {
- s.push_back(sum);
- if(sum*2<k)
- s.push_back(sum*2);
- }
- if(sum==k || sum*2==k)
- {
- c=1;
- break;
- }
- }
- for(j=o; j<d; j++)
- {
- for(k1=o,sum=0; k1<n; k1++)
- {
- if(j & (1<<k1))
- {
- sum=sum+a[k1];
- }
- }
- if(sum<k)
- {
- s1.push_back(sum);
- if(sum*2<k)
- s1.push_back(sum*2);
- }
- if(sum==k || sum*2==k)
- {
- c=1;
- break;
- }
- }
- //sort(s.begin(),s.end());
- sort(s1.begin(),s1.end());
- l=s.size();
- l1=s1.size();
- if(c==0)
- {
- for(j=0; j<l; j++)
- {
- diff=k-s[j];
- left=0;
- right=l1-1;
- while(left<=right)
- {
- mid=(left+right)/2;
- if(s1[mid]==diff)
- {
- c=1;
- break;
- }
- else if(s1[mid]<diff)
- {
- left=mid+1;
- }
- else
- {
- right=mid-1;
- }
- }
- if(c==1)
- break;
- }
- }
- cout<<"Case "<<i<<": ";
- if(c==1)
- cout<<"Yes"<<endl;
- else
- cout<<"No"<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement