fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6.  
  7. inline int get_int()
  8. {
  9. int n=0;
  10. char c=0;
  11. while(c<33)
  12. c=getchar_unlocked();
  13. while(c>='0'&&c<='9')
  14. {
  15. n=(n<<3)+(n<<1)+(c-'0');
  16. c=getchar_unlocked();
  17. }
  18. return n;
  19. }
  20. int main(int argc, char const *argv[])
  21. {
  22. int t,n,a,b,number,totalones,i,quint;
  23. scanf("%d", &t);
  24. while(t--)
  25. {
  26. int chambernoa,chambernob, oneina=0,oneinb=0,logproblem1,logproblem2;
  27.  
  28. number=0;
  29. n=get_int();
  30. a=get_int();
  31. b=get_int();
  32. /* if (a==0)
  33.   chambernoa=1;
  34.   else
  35.   chambernoa=log2(a)+1;
  36.   if (b==0)
  37.   chambernob=1;
  38.   else
  39.   chambernob=log2(b)+1;
  40.   logproblem1=log2(pow(2,chambernoa)-a);
  41.   logproblem2=log2(pow(2,chambernob)-b);
  42.   // if (totalones>0)
  43.   // number=pow(2,--n);
  44.   // for (i=1;i<totalones;i++)
  45.   // number+=pow(2,--n);
  46.   // printf("%d\n", number);
  47.   */
  48. while(a)
  49. {
  50. oneina++;
  51. a=a&(a-1);
  52. }
  53. while(b)
  54. {
  55. b=b&(b-1);
  56. oneinb++;
  57. }
  58. if ((oneinb+oneina)>n)
  59. totalones=(2*n)-oneina-oneinb;
  60. else
  61. totalones=oneina+oneinb;
  62. // int totalzeroes=n-totalones;
  63.  
  64. // unsigned int temp;
  65. // temp=1<<(totalones);
  66. // temp--;
  67. // temp=temp<<(totalzeroes);
  68. // printf("%u\n", temp);
  69. if (totalones>0)
  70. number=pow(2,--n);
  71. for (i=1;i<totalones;i++)
  72. number+=pow(2,--n);
  73. printf("%d\n", number);
  74.  
  75. }
  76. return 0;
  77. }
Success #stdin #stdout 0s 3344KB
stdin
3
3 5 4
5 0 1
4 3 7
stdout
7
16
14