結果
問題 | No.2176 LRM Question 1 |
ユーザー |
![]() |
提出日時 | 2023-01-06 21:50:08 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 52 ms / 2,000 ms |
コード長 | 2,777 bytes |
コンパイル時間 | 2,135 ms |
コンパイル使用メモリ | 200,092 KB |
最終ジャッジ日時 | 2025-02-09 23:50:23 |
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 22 |
ソースコード
#include <bits/stdc++.h>#define rep(i, a, n) for(int i = a; i < (n); i++)#define drep(i, a, n) for(int i = (n)-1; i >= a; i--)using namespace std;using ll = long long;using P = pair<int, int>;const int INF = 1001001001;const ll LINF = 1001002003004005006ll;//const int mod = 1000000007;//const int mod = 998244353;int mod = 1000000007;//MINTstruct mint {unsigned x;mint(): x(0) {}mint(ll x):x((x%mod+mod)%mod) {}mint operator-() const { return mint(0) - *this;}mint operator~() const { return mint(1) / *this;}mint& operator+=(const mint& a) { if((x+=a.x)>=mod) x-=mod; return *this;}mint& operator-=(const mint& a) { if((x+=mod-a.x)>=mod) x-=mod; return *this;}mint& operator*=(const mint& a) { x=(unsigned long long)x*a.x%mod; return *this;}mint& operator/=(const mint& a) { x=(unsigned long long)x*a.pow(mod-2).x%mod; return *this;}mint operator+(const mint& a) const { return mint(*this) += a;}mint operator-(const mint& a) const { return mint(*this) -= a;}mint operator*(const mint& a) const { return mint(*this) *= a;}mint operator/(const mint& a) const { return mint(*this) /= a;}mint pow(ll t) const {if (!t) return 1;mint res = pow(t>>1);res *= res;return (t&1)?res*x:res;}bool operator<(const mint& a) const { return x < a.x;}bool operator==(const mint& a) const { return x == a.x;}bool operator!=(const mint& a) const { return x != a.x;}};mint ex(mint x, ll t) { return x.pow(t);}istream& operator>>(istream& i, mint& a) { unsigned long long t; i>>t; a=mint(t); return i;}ostream& operator<<(ostream& o, const mint& a) { return o<<a.x;}struct modinv{int n;vector<mint> d;modinv(): n(2), d({0, 1}) {};mint operator()(int i){ while(n <= i){ d.push_back(-d[mod%n]*(mod/n)); n++;} return d[i];}mint operator[](int i) const { return d[i];}}invs;struct modfact{int n;vector<mint> d;modfact(): n(2), d({1, 1}) {}mint operator()(int i) { while(n <= i){ d.push_back(d.back()*n); n++;} return d[i];}mint operator[](int i) const { return d[i];}}facs;struct modfactinv{int n;vector<mint> d;modfactinv(): n(2), d({1, 1}) {}mint operator()(int i) { while(n <= i){ d.push_back(d.back()*invs(n)); n++;} return d[i];}mint operator[](int i) const { return d[i];}}ifacs;mint comb(int a, int b){if(a < b || b < 0) return 0;return facs(a)*ifacs(b)*ifacs(a-b);}int main(){ll l, r, m;cin >> l >> r >> m;mod = (int)m;if (l >= m) {cout << 0 << endl;return 0;}mint ans = 1;rep(i, 1, l+1) {ans = ans*facs(i);}mint res = ans;for (ll i = l+1; i <= min(r, m); i++) {res += ans*facs((int)i);ans *= facs((int)i);}cout << res << endl;return 0;}