fork download
  1. #pragma GCC optimize("O3,unroll-loops")
  2. #include <bits/stdc++.h>
  3. //#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
  4. using namespace std;
  5.  
  6. #define FOR(i, a, b) for(LL i = (a); i < (b); i++)
  7. #define REP(i, a, b) for(LL i = (a); i <= (b); i++)
  8. #define FORD(i, a, b) for(LL i = (a); i > (b); i--)
  9. #define REPD(i, a, b) for(LL i = (a); i >= (b); i--)
  10. #define SZ(a) (int((a).size()))
  11. #define ALL(a) (a).begin(), (a).end()
  12. #define ALLD(a) (a).rbegin(), (a).rend()
  13. #define PB push_back
  14. #define MP make_pair
  15. #define LL long long
  16. #define ULL unsigned long long
  17. #define LD long double
  18. #define PLL pair<LL, LL>
  19. #define FI first
  20. #define SE second
  21. #define VTLL vector<long long>
  22. #define VTLD vector<long double>
  23. #define TOLOWER(s) transform((s).begin(), (s).end(), (s).begin(), ::tolower)
  24. #define TOUPPER(s) transform((s).begin(), (s).end(), (s).begin(), ::toupper)
  25. #define MIN(v) *min_element((v).begin(), (v).end())
  26. #define MAX(v) *max_element((v).begin(), (v).end())
  27. #define LB(c, x) distance((c).begin(), lower_bound(ALL(c), (x)))
  28. #define UB(c, x) distance((c).begin(), upper_bound(ALL(c), (x)))
  29. #define UNIQUE(x) sort(ALL(x)), x.erase(unique(ALL(x)), x.end()), x.shrink_to_fit()
  30. template <typename T>
  31. T SUM(const vector<T> a) {
  32. T sum = 0;
  33. for (T v : a) sum += v;
  34. return sum;
  35. }
  36. #define MS(a, x) memset(a, x, sizeof(a))
  37. #define FID(x) fixed << setprecision(x)
  38. #define MASK(i) (1LL << (i))
  39. #define BIT(x, i) (((x) >> (i)) & 1)
  40. #define ___Dang_Nhat_Tinh___ signed main()
  41. #define TIME (1.0 * clock() / CLOCKS_PER_SEC)
  42. #define FILE(name) if (fopen(name".inp", "r")) {freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout);}
  43.  
  44. template <typename T>
  45. void debug_val(const T &val) { cerr << val; }
  46.  
  47. template <typename T1, typename T2>
  48. void debug_val(const pair<T1, T2> &p) {
  49. cerr << "(";
  50. debug_val(p.first);
  51. cerr << ", ";
  52. debug_val(p.second);
  53. cerr << ")";
  54. }
  55.  
  56. template <typename T>
  57. void debug_val(const vector<T> &v) {
  58. cerr << "[";
  59. for (size_t i = 0; i < v.size(); ++i) {
  60. if (i) cerr << ", ";
  61. debug_val(v[i]);
  62. }
  63. cerr << "]";
  64. }
  65.  
  66. template <typename T>
  67. void debug_val(const set<T> &s) {
  68. cerr << "{";
  69. bool first = true;
  70. for (const auto &x : s) {
  71. if (!first) cerr << ", ";
  72. debug_val(x);
  73. first = false;
  74. }
  75. cerr << "}";
  76. }
  77. template <typename T>
  78. void debug_val(const multiset<T> &s) {
  79. cerr << "{";
  80. bool first = true;
  81. for (const auto &x : s) {
  82. if (!first) cerr << ", ";
  83. debug_val(x);
  84. first = false;
  85. }
  86. cerr << "}";
  87. }
  88.  
  89. template <typename K, typename V>
  90. void debug_val(const map<K, V> &m) {
  91. cerr << "{";
  92. bool first = true;
  93. for (const auto &kv : m) {
  94. if (!first) cerr << ", ";
  95. debug_val(kv);
  96. first = false;
  97. }
  98. cerr << "}";
  99. }
  100.  
  101. template<typename T>
  102. void dbg(T x) { debug_val(x); cerr << '\n'; }
  103.  
  104. template<typename T, typename... Args>
  105. void dbg(T x, Args... args) {
  106. debug_val(x); cerr << ", ";
  107. dbg(args...);
  108. }
  109. #define DEBUG(...) cerr << "[" << #__VA_ARGS__ << "] = ", dbg(__VA_ARGS__)
  110.  
  111. LL lcm(LL a, LL b) { return a / __gcd(a, b) * b; }
  112. LL max(LL a, LL b) { return a > b ? a : b; }
  113. LL min(LL a, LL b) { return a < b ? a : b; }
  114. const LD PI = 3.1415926535897;
  115. const LL MAX = 2e5 + 7;
  116. const LL MOD = 1e9 + 7;
  117. const LL LIM = 1e4 + 5;
  118.  
  119. LL frac[MAX], finv[MAX];
  120. LL power(LL a, LL n) {
  121. LL res = 1;
  122. while (n > 0) {
  123. if (n & 1) res = res * a % MOD;
  124. a = a * a % MOD;
  125. n /= 2;
  126. }
  127. return res;
  128. }
  129.  
  130. void precompute() {
  131. frac[0] = 1;
  132. FOR(i, 1, MAX) frac[i] = frac[i - 1] * i % MOD;
  133. finv[MAX - 1] = power(frac[MAX - 1], MOD - 2);
  134. REPD(i, MAX - 2, 0) finv[i] = finv[i + 1] * (i + 1) % MOD;
  135. }
  136.  
  137. LL C(LL n, LL k) {
  138. if (k < 0 || k > n) return 0;
  139. return frac[n] * finv[k] % MOD * finv[n - k] % MOD;
  140. }
  141.  
  142. ___Dang_Nhat_Tinh___ {
  143. ios_base::sync_with_stdio(false);
  144. cin.tie(nullptr);
  145. cout.tie(nullptr);
  146.  
  147. precompute();
  148. LL m, q; cin >> m >> q;
  149. while (q--) {
  150. LL x, y, a, b, c, d;
  151. cin >> x >> y >> a >> b >> c >> d;
  152. LL n = x + y;
  153. LL res = a * C(n - 1, y) % MOD;
  154. res += b * C(n - 2, y - 1) % MOD;
  155. res += c * C(n - 3, y - 2) % MOD;
  156. res += d * C(n - 4, y - 3) % MOD;
  157. res %= MOD;
  158. cout << res << '\n';
  159. }
  160.  
  161. cerr << "Time elapsed: " << TIME << " s.\n";
  162. return (0 ^ 0);
  163. }
Success #stdin #stdout #stderr 0.01s 6916KB
stdin
5 1 
3 3 2 1 4 3
stdout
41
stderr
Time elapsed: 0.006479 s.