Advertisement
Guest User

Untitled

a guest
Jan 12th, 2016
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. /*
  2. */
  3.  
  4. //#pragma comment(linker, "/STACK:16777216")
  5. #define _CRT_SECURE_NO_WARNINGS
  6. #include <fstream>
  7. #include <iostream>
  8. #include <string>
  9. #include <complex>
  10. #include <math.h>
  11. #include <set>
  12. #include <vector>
  13. #include <map>
  14. #include <queue>
  15. #include <stdio.h>
  16. #include <stack>
  17. #include <algorithm>
  18. #include <list>
  19. #include <ctime>
  20. #include <memory.h>
  21.  
  22. #define y0 sdkfaslhagaklsldk
  23. #define y1 aasdfasdfasdf
  24. #define yn askfhwqriuperikldjk
  25. #define j1 assdgsdgasghsf
  26. #define tm sdfjahlfasfh
  27. #define lr asgasgash
  28. #define prev asdgadsgashah
  29.  
  30. #define eps 1e-8
  31. //#define M_PI 3.141592653589793
  32. #define bs 1000000007
  33. #define bsize 256
  34.  
  35. const int N = 700050;
  36.  
  37. using namespace std;
  38.  
  39. int tests;
  40. int n, k, l;
  41. int dp[22][1 << 22];
  42. long long C[50][50];
  43. long long pw[500];
  44.  
  45. void add(int &a, int b)
  46. {
  47. a += b;
  48. if (a >= bs)
  49. a -= bs;
  50. }
  51.  
  52. int main(){
  53. //freopen("route.in","r",stdin);
  54. //freopen("route.out","w",stdout);
  55. // freopen("F:/in.txt","r",stdin);
  56. //freopen("F:/output.txt","w",stdout);
  57. ios_base::sync_with_stdio(0);
  58. //cin.tie(0);
  59.  
  60. for (int i = 0; i < 25; i++)
  61. {
  62. for (int j = 0; j <= i; j++)
  63. {
  64. if (j == 0 || j == i)
  65. C[i][j] = 1;
  66. else
  67. C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % bs;
  68. }
  69. }
  70.  
  71. cin >> tests;
  72. //tests = 1;
  73.  
  74. for (; tests; --tests)
  75. {
  76. cin >> n >> k >> l;
  77.  
  78. //n = k = 20;
  79. //l = 1000000;
  80.  
  81. pw[0] = 1;
  82. for (int i = 1; i <= n; i++)
  83. {
  84. if (l <= k)
  85. pw[i] = 0;
  86. else
  87. pw[i] = (1ll * pw[i - 1] * (l - k)) % bs;
  88. }
  89.  
  90. for (int i = 0; i <= n; i++)
  91. {
  92. for (int j = 0; j < (1<<k)*2; j++)
  93. {
  94. dp[i][j] = 0;
  95. }
  96. }
  97.  
  98. int ans = 0;
  99.  
  100. dp[0][1] = 1;
  101.  
  102. int mag = (1 << k)*2;
  103. --mag;
  104. /*
  105. int qmask = (1 << 15);
  106. --qmask;
  107. cout << ((qmask | (qmask << 20))&mag) << endl;
  108. */
  109.  
  110. for (int iter = 0; iter < n; iter++)
  111. {
  112. for (int mask = 0; mask < 2*(1 << k); mask++)
  113. {
  114. if (dp[iter][mask] == 0)
  115. continue;
  116. for (int nxt = 0; nxt <= l&&nxt <= k; nxt++)
  117. {
  118. add(dp[iter + 1][(mask | (mask << nxt))&mag], dp[iter][mask]);
  119. }
  120. }
  121. }
  122. /*
  123. for (int mask = 0; mask < 2*(1 << k); mask++)
  124. {
  125. if (mask&(1 << k))
  126. add(ans, dp[n][mask]);
  127. }
  128. */
  129. for (int cnt = 0; cnt <= n; cnt++)
  130. {
  131. for (int mask = 0; mask < 2 * (1 << k); mask++)
  132. {
  133. if (mask&(1 << k))
  134. ans = (ans + 1ll * dp[cnt][mask] * pw[n - cnt] % bs*C[n][cnt] % bs) % bs;
  135. }
  136. }
  137.  
  138. cout << ans << endl;
  139.  
  140. }
  141. cin.get(); cin.get();
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement