fork download
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. #define st first
  4. #define nd second
  5. #define pb push_back
  6. #define pob pop_back
  7. #define all(st) st.begin(), st.end()
  8. #define ii pair<int, int>
  9. #define mod 1000003
  10.  
  11. using namespace std;
  12.  
  13. const int nmax = 1e6 + 5;
  14. int n, m;
  15. int a[nmax], fr[nmax], z[nmax], f[nmax];
  16.  
  17. int cal(int n) {
  18. int m = n / 2;
  19. return (fr[n] * z[m] % mod * z[m + 1] % mod);
  20. }
  21.  
  22. int Pow(int a, int b) {
  23. int res = 1;
  24. while (b > 0) {
  25. if (b & 1)
  26. res = (res * a) % mod;
  27. a = (a * a) % mod;
  28. b >>= 1;
  29. }
  30.  
  31. return res;
  32. }
  33.  
  34. signed main() {
  35. ios_base::sync_with_stdio(0), cin.tie(NULL), cout.tie(NULL);
  36. // freopen("inp.inp","r",stdin);
  37. // freopen("out.out","w",stdout);
  38.  
  39. cin >> n >> m;
  40. for (int i = 1; i <= 2 * n; i++) cin >> a[i];
  41. n = 2 * n;
  42. fr[0] = 1;
  43. for (int i = 1; i <= n; i++) fr[i] = (fr[i - 1] * i) % mod;
  44. z[n] = Pow(fr[n], mod - 2);
  45. for (int i = n; i >= 1; i--) z[i - 1] = (z[i] * i) % mod;
  46. if (n <= 4000) {
  47. f[0] = 1;
  48. for (int i = 2; i <= n; i += 2)
  49. for (int j = 0; j < i; j += 2)
  50. if (a[i] - a[j + 1] <= m) {
  51. f[i] = (f[i] + f[j] * cal(i - j - 2) % mod) % mod;
  52. }
  53. cout << f[n];
  54. } else
  55. cout << cal(n);
  56.  
  57. return 0;
  58. }
  59.  
Success #stdin #stdout 0s 7744KB
stdin
Standard input is empty
stdout
1