Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define mx 100000007
  4.  
  5. int scan()
  6. {
  7. char r;
  8. bool start=false;
  9. int ret=0;
  10. while(true)
  11. {
  12. r=getchar_unlocked();
  13. if((r-'0'<0 || r-'0'>9) && r!='-' && !start)
  14. {
  15. continue;
  16. }
  17. if((r-'0'<0 || r-'0'>9) && r!='-' && start)
  18. {
  19. break;
  20. }
  21. if(start)ret*=10;
  22. start=true;
  23. ret+=r-'0';
  24. }
  25.  
  26. return ret;
  27.  
  28. }
  29.  
  30. int dp[1010][1024],a[1010],b[1010],chk[1010];
  31.  
  32. int main()
  33. {
  34. int t,u,n,m,i,j,ans;
  35. memset(chk,0,sizeof(chk));
  36. t=scan();
  37. for(u=1;u<=t;u++)
  38. {
  39. ans=0;
  40. n=scan();
  41. m=scan();
  42.  
  43. for(i=1;i<=n;i++)
  44. a[i]=scan();
  45.  
  46. for(i=1;i<=m;i++)
  47. {
  48. b[i]=scan();
  49. chk[b[i]]=1;
  50. }
  51.  
  52. dp[1][0]=1;
  53.  
  54. for(i=1;i<1024;i++)
  55. dp[1][i]=0;
  56.  
  57. for(i=1;i<=n;i++)
  58. {
  59. for(j=0;j<1024;j++)
  60. {
  61. dp[i+1][j]=dp[i][j]+dp[i][j^a[i]];
  62. if(dp[i+1][j]>=mx)
  63. dp[i+1][j]-=mx;
  64. }
  65. }
  66. for(i=0;i<1024;i++)
  67. {
  68. if(!chk[i])
  69. {
  70. ans+=dp[n+1][i];
  71. if(ans>=mx)
  72. ans-=mx;
  73. }
  74. chk[i]=0;
  75. }
  76. printf("Case %d: %d\n",u,ans);
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement