fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define pb push_back
  4. #define mp make_pair
  5. typedef pair<int,int> pii;
  6. typedef long long ll;
  7. typedef double ld;
  8. typedef vector<int> vi;
  9. #define fi first
  10. #define se second
  11. #define fe first
  12. #define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
  13. #define Edg int M=0,fst[SZ],vb[SZ],nxt[SZ];void ad_de(int a,int b){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;}void adde(int a,int b){ad_de(a,b);ad_de(b,a);}
  14. #define Edgc int M=0,fst[SZ],vb[SZ],nxt[SZ],vc[SZ];void ad_de(int a,int b,int c){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;vc[M]=c;}void adde(int a,int b,int c){ad_de(a,b,c);ad_de(b,a,c);}
  15. #define es(x,e) (int e=fst[x];e;e=nxt[e])
  16. #define esb(x,e,b) (int e=fst[x],b=vb[e];e;e=nxt[e],b=vb[e])
  17. #define SZ 666666
  18. int n,q,k,g=0;
  19. ll a[SZ],b[SZ];
  20. ll f[55],qz[55];
  21. bool ok(ll x)
  22. {
  23. f[0]=1;
  24. for(int i=1;i<=g;++i)
  25. {
  26. f[i]=0;
  27. for(int j=i;j>=1;--j)
  28. if(((qz[i]-qz[j-1])&x)==x) f[i]|=f[j-1]<<1;
  29. }
  30. return (f[g]>>k)&1;
  31. }
  32. int main()
  33. {
  34. scanf("%d",&n);
  35. for(int i=1;i<=n;++i) scanf("%lld",a+i);
  36. scanf("%d",&q);
  37. while(q--)
  38. {
  39. scanf("%d",&k);
  40. assert(k<=n);
  41. g=0;
  42. for(int i=1;i<=n;++i)
  43. {
  44. int x;
  45. scanf("%d",&x);
  46. if(a[i]*x)
  47. b[++g]=a[i]*x;
  48. }
  49. assert(g<=50);
  50. for(int i=1;i<=g;++i)
  51. qz[i]=qz[i-1]+b[i];
  52. if(k>g)
  53. {
  54. puts("0");
  55. continue;
  56. }
  57. ll w=0;
  58. for(int j=62;j>=0;--j)
  59. if(ok(w|(1LL<<j)))
  60. w|=1LL<<j;
  61. printf("%lld\n",w);
  62. }
  63. }
Success #stdin #stdout 0s 25648KB
stdin
Standard input is empty
stdout
Standard output is empty