fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long int ll;
  4. const int md = 1e9+7;
  5. const int N = 100005;
  6. int fact[N],ifact[N];
  7.  
  8. int power(int a,int b)
  9. {
  10. int ans = 1;
  11. while(b)
  12. {
  13. if(b&1)
  14. ans=((ll)ans*a)%md;
  15. a = ((ll)a*a)%md;
  16. b>>=1;
  17. }
  18. return ans;
  19. }
  20. int nCr(int n,int k)
  21. {
  22. if(n<k || k<0)
  23. return 0;
  24. int ans = fact[n];
  25. ans = ((ll)ans*ifact[n-k])%md;
  26. ans = ((ll)ans*ifact[k])%md;
  27. return ans;
  28. }
  29. signed main()
  30. {
  31. //clock_t clk = clock();
  32. fact[0] = 1;
  33. ifact[0] = 1;
  34. for(int i=1;i<N;i++)
  35. {
  36. fact[i] = ((ll)fact[i-1]*i)%md;
  37. }
  38. ifact[N-1] = power(fact[N-1],md-2);
  39. for(int i = N-2;i>=0;i--)
  40. ifact[i] = ((ll)ifact[i+1]*(i+1))%md;
  41. int t;
  42. scanf("%d",&t);
  43. assert(t<=20 && t>=1);
  44. while(t--)
  45. {
  46. int n,k;
  47. scanf("%d %d",&n,&k);
  48. assert(n>=1 && n<=100000);
  49. assert(k>=0 && k<=100000);
  50. n>>=1;
  51. int ans = 0;
  52. for(int i=0;i<=min(n/2,k);i++)
  53. {
  54. int val = (nCr(n,i)-nCr(n,i-1))%md;
  55. ans = (ans + ((ll)val*val)%md)%md;
  56. }
  57. ans = ((ll)ans*power(nCr(2*n,n),md-2))%md;
  58. ans = ((ll)ans*(n+1))%md;
  59. printf("%d\n",ans);
  60. }
  61. //cout<<(float)(clock()-clk)/CLOCKS_PER_SEC;
  62. return 0;
  63. }
Runtime error #stdin #stdout #stderr 0s 4484KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
prog: prog.cpp:43: int main(): Assertion `t<=20 && t>=1' failed.