Advertisement
Mehulcoder

CF24

Oct 24th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. /*
  2. Author: Mehul Chaturvedi
  3. Talent is overrated
  4. */
  5.  
  6. #include <bits/stdc++.h>
  7. using namespace std;
  8.  
  9. using ll = long long;
  10. using ld = long double;
  11. using pll = pair<ll, ll>;
  12.  
  13. #define mp make_pair
  14. #define all(x) (x).begin(), (x).end()
  15. #define f first
  16. #define s second
  17. #define vll vector<long long>
  18. #define vvll vector<vector<ll>>
  19. #define vset(v, n, val) v.clear(); v.resize(n, val)
  20. #define INF 4557430888798830399ll
  21. #define fr(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
  22. #define rep(i, n) for (int i = 0, _n = (n); i < _n; i++)
  23. #define repr(i, n) for (int i = n; i >= 0; i--)
  24. #define frr(i, a, b) for (int i = (a), _b = (b); i >= _b; i--)
  25. #define trav(a, x) for(auto& a : x)
  26. #define fil(ar, val) memset(ar, val, sizeof(ar))
  27. const ll MOD = 1e9 + 7;
  28.  
  29. const ll N = 1e3 + 10;
  30. vector<ll> inv;
  31. vector<ll> fact;
  32. vector<ll> invFact;
  33. vector<ll> spf;
  34.  
  35. void precalc() {
  36.     inv.resize(N, 1);
  37.     fact.resize(N, 1);
  38.     invFact.resize(N, 1);
  39.     spf.resize(N, 0);
  40.  
  41.     fr(i, 2, N - 1) {
  42.         inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD;
  43.         fact[i] = (fact[i - 1] * i) % MOD;
  44.         invFact[i] = (invFact[i - 1] * inv[i]) % MOD;
  45.     }
  46.  
  47.     //Calculating spf
  48.     spf[1] = 1;
  49.     fr(i, 2, N - 1) {
  50.         if (!spf[i]) {
  51.             spf[i] = i;
  52.             for (int j = 2 * i; j <= N - 1; j += i) {
  53.                 if (!spf[j]) {
  54.                     spf[j] = i;
  55.                 }
  56.             }
  57.         }
  58.     }
  59.  
  60.     return;
  61. }
  62.  
  63. ll ncr(ll n, ll r, ll mod = MOD) {
  64.     if (r > n) {
  65.         return 0;
  66.     }
  67.     return (((fact[n] * invFact[n - r]) % mod) * invFact[r]) % mod;
  68. }
  69.  
  70. void solve() {
  71.     ll n, x, pos;
  72.     cin >> n >> x >> pos;
  73.  
  74.     ll lo = 0;
  75.     ll hi = n;
  76.     ll large = 0;
  77.     ll small = 0;
  78.     while (lo < hi) {
  79.         ll middle = (lo + hi) / 2;
  80.         if (middle > pos) large++;
  81.         if (middle < pos) small++;
  82.         if (middle <= pos) {
  83.             lo = middle + 1;
  84.         } else {
  85.             hi = middle;
  86.         }
  87.     }
  88.  
  89.  
  90.  
  91.     cout << (fact[n - 1 - large - small] % MOD * ncr(n - x, large) % MOD * ncr(x - 1, small)) % MOD*fact[large] % MOD*fact[small] % MOD << '\n';
  92.     return;
  93. }
  94.  
  95. int main(int argc , char ** argv) {
  96.     ios_base::sync_with_stdio(false) ;
  97.     cin.tie(NULL) ;
  98.  
  99.     ll t = 1;
  100.     precalc();
  101.     while (t--) {
  102.         solve();
  103.     }
  104.  
  105.     return 0 ;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement