Advertisement
mhdew

LOJ1235

Dec 31st, 2018
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. /*Basic info
  2. Problem : LOJ1235
  3. Date : 31-12-18
  4. Author : Shesher
  5. */
  6.  
  7. #include<bits/stdc++.h>
  8.  
  9. using namespace std;
  10.  
  11. ///Template
  12. #define in1()    freopen("C:\\Users\\SHESHER\\Rest\\Desktop\\MY COMPUTER\\Code\\Template\\input.txt", "r", stdin);
  13. #define out1()   freopen("C:\\Users\\SHESHER\\Rest\\Desktop\\MY COMPUTER\\Code\\Template\\output.txt", "w", stdout);
  14.  
  15.  
  16. //Data types
  17. #define lo      long
  18. #define ll      long long
  19. #define llu     unsigned long long
  20.  
  21. //loop
  22. #define f1(i,x,y)   for(int i=x;i<=y;i++)
  23.  
  24. //Constants
  25. #define MAX     100007
  26. #define MOD     10000007
  27. #define PI      acos(-1.0)
  28.  
  29. //STL
  30. #define vout(v)    for(int i=0;i<v.size();i++){cout<<v[i]; if(i==v.size()-1) cout<<endl; else cout<<" ";}
  31.  
  32. //Scan
  33. #define sc(x)    scanf("%d", &x)
  34. #define scl(x)   scanf("%lld", &x)
  35.  
  36. //Print
  37. #define pa(a,i,n)  for(int i=0;i<n;i++){ cout<<a[i]; if(i==n-1) cout<<endl; else cout<<" ";}
  38.  
  39. vector<ll>  v1, v2;
  40. ll sum;
  41. bool f=0;
  42. ll k;
  43.  
  44. void comb(int a[],int pos, int n)
  45. {
  46.     if(f) return;
  47.     if(pos==n){
  48.         if(sum==k){
  49.             f=1;
  50.             return;
  51.         }
  52.         v1.push_back(sum);
  53.         v2.push_back(sum);
  54.         return;
  55.     }
  56.  
  57.     sum+=a[pos];
  58.     comb(a,pos+1,n);
  59.     sum-=a[pos];
  60.     comb(a,pos+1,n);
  61. }
  62.  
  63. int main()
  64. {
  65. //    freopen("in.txt", "r", stdin);
  66. //    freopen("out.txt", "w", stdout);
  67.     int t;
  68.     cin>>t;
  69.     f1(ti,1,t){
  70.         int n;
  71.         cin>>n>>k;
  72.         int a[n+2];
  73.         ll sum2=0;
  74.         for(int i=0;i<n;i++){
  75.             cin>>a[i];
  76.             sum2+=a[i];
  77.         }
  78.  
  79.         if((sum2*2)<k){
  80.             printf("Case %d: No\n", ti);
  81.             continue;
  82.         }
  83.  
  84.         v1.clear();
  85.         v2.clear();
  86.         sum=0;
  87.         f=0;
  88.         comb(a,0,n);
  89.         if(f){
  90.             printf("Case %d: Yes\n", ti);
  91.             continue;
  92.         }
  93.  
  94. //        vout(v1);
  95. //        vout(v2);
  96.         sort(v1.begin(),v1.end());
  97.  
  98.         bool f2=0;
  99.         for(int i=0;i<v2.size();i++){
  100.             ll temp=k-v2[i];
  101.  
  102.             int l=0, r=v1.size()-1, mid;
  103.             while(l<=r){
  104.                 mid=(l+r)/2;
  105.  
  106.                 if(v1[mid]==temp){
  107.                     f2=1;
  108.                     break;
  109.                 }
  110.                 else if(v1[mid]>temp) r=mid-1;
  111.                 else l=mid+1;
  112.             }
  113.             if(f2) break;
  114.         }
  115.         if(f2){
  116.             printf("Case %d: Yes\n", ti);
  117.         }
  118.         else{
  119.             printf("Case %d: No\n", ti);
  120.         }
  121.  
  122.     }
  123.     return 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement