結果
問題 | No.2197 Same Dish |
ユーザー |
![]() |
提出日時 | 2023-01-21 16:05:30 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 81 ms / 2,000 ms |
コード長 | 5,405 bytes |
コンパイル時間 | 3,752 ms |
コンパイル使用メモリ | 259,136 KB |
最終ジャッジ日時 | 2025-02-10 06:10:40 |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 |
ソースコード
#if !__INCLUDE_LEVEL__#include __FILE__template<int MOD> struct Fp {long long val;constexpr Fp(long long v = 0) noexcept : val(v % MOD) {if (val < 0) val += MOD;}constexpr int getmod() { return MOD; }constexpr Fp operator - () const noexcept {return val ? MOD - val : 0;}constexpr Fp operator + (const Fp& r) const noexcept { return Fp(*this) += r; }constexpr Fp operator - (const Fp& r) const noexcept { return Fp(*this) -= r; }constexpr Fp operator * (const Fp& r) const noexcept { return Fp(*this) *= r; }constexpr Fp operator / (const Fp& r) const noexcept { return Fp(*this) /= r; }constexpr Fp& operator += (const Fp& r) noexcept {val += r.val;if (val >= MOD) val -= MOD;return *this;}constexpr Fp& operator -= (const Fp& r) noexcept {val -= r.val;if (val < 0) val += MOD;return *this;}constexpr Fp& operator *= (const Fp& r) noexcept {val = val * r.val % MOD;return *this;}constexpr Fp& operator /= (const Fp& r) noexcept {long long a = r.val, b = MOD, u = 1, v = 0;while (b) {long long t = a / b;a -= t * b; swap(a, b);u -= t * v; swap(u, v);}val = val * u % MOD;if (val < 0) val += MOD;return *this;}constexpr bool operator == (const Fp& r) const noexcept {return this->val == r.val;}constexpr bool operator != (const Fp& r) const noexcept {return this->val != r.val;}friend constexpr ostream& operator << (ostream &os, const Fp<MOD>& x) noexcept {return os << x.val;}friend constexpr Fp<MOD> modpow(const Fp<MOD> &a, long long n) noexcept {if (n == 0) return 1;auto t = modpow(a, n / 2);t = t * t;if (n & 1) t = t * a;return t;}};// const int MOD = 1000000007;const int MOD = 998244353;using mint = Fp<MOD>;// (a**n)%mod// const int MOD = 1000000007;// const int MOD = 998244353;ll modpow(ll a,ll n){ll res=1;while(n>0){if(n&1){res=res*a%MOD;}a=a*a%MOD;n>>=1;}return res;}struct Solver {void solve() {int n,k;cin>>n>>k;V<int> l(n),r(n);V<P> lr;rep(i,n){cin>>l[i]>>r[i];lr.emplace_back(l[i],r[i]);}sort(all(lr));mint ans=modpow(k,n);mint now=1;min_heap<int> pq;rep(i,n){while(pq.size()!=0&&pq.top()<=lr[i].first)pq.pop();now*=(k-pq.size());pq.emplace(lr[i].second);}cout<<ans-now<<endl;}};signed main() {int ts = 1;// scanf("%lld",&ts);rep(ti,ts) {Solver solver;solver.solve();}return 0;}#else#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;// #include <ext/pb_ds/assoc_container.hpp>// #include <ext/pb_ds/tree_policy.hpp>// using namespace __gnu_pbds;using namespace std;#define int llusing ll=long long;using ld = long double;using uint = unsigned;using ull = unsigned long long;using P=pair<int,int>;using TP=tuple<int,int,int>;template <class T> using V = vector<T>;template <class T> using max_heap = priority_queue<T>;template <class T> using min_heap = priority_queue<T, vector<T>, greater<>>;#define FOR1(a) for (ll _ = 0; _ < ll(a); ++_)#define FOR2(i, a) for (ll i = 0; i < ll(a); ++i)#define FOR3(i, a, b) for (ll i = a; i < ll(b); ++i)#define FOR4(i, a, b, c) for (ll i = a; i < ll(b); i += (c))#define FOR1_R(a) for (ll i = (a)-1; i >= ll(0); --i)#define FOR2_R(i, a) for (ll i = (a)-1; i >= ll(0); --i)#define FOR3_R(i, a, b) for (ll i = (b)-1; i >= ll(a); --i)#define FOR4_R(i, a, b, c) for (ll i = (b)-1; i >= ll(a); i -= (c))#define overload4(a, b, c, d, e, ...) e#define rep(...) overload4(__VA_ARGS__, FOR4, FOR3, FOR2, FOR1)(__VA_ARGS__)#define rrep(...) overload4(__VA_ARGS__, FOR4_R, FOR3_R, FOR2_R, FOR1_R)(__VA_ARGS__)#define fore(i,a) for(auto &i:a)#define all(x) x.begin(),x.end()#define sz(x) ((int)(x).size())#define bp(x) (__builtin_popcountll((long long)(x)))#define elif else if#define mpa make_pair#define bit(n) (1LL<<(n))#define LB(c, x) distance((c).begin(), lower_bound(all(c), (x)))#define UB(c, x) distance((c).begin(), upper_bound(all(c), (x)))#define UNIQUE(x) sort(all(x)), x.erase(unique(all(x)), x.end())template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }template<typename T>string join(const T&v,const string& d=""){stringstream s;rep(i,sz(v))(i?s<<d:s)<<v[i];return s.str();}template<typename T>ostream& operator<<(ostream&o,const vector<T>&v){if(sz(v))o<<join(v," ");return o;}template<typename T1,typename T2>ostream& operator<<(ostream&o,const pair<T1,T2>&v){return o<<v.first<<","<<v.second;}template<typename T1,typename T2>bool mins(T1& x,const T2&y){if(x>y){x=y;return true;}else return false;}template<typename T1,typename T2>bool maxs(T1& x,const T2&y){if(x<y){x=y;return true;}else return false;}template<typename Tx, typename Ty>Tx dup(Tx x, Ty y){return (x+y-1)/y;}template<typename T>ll suma(const vector<T>&a){ll res(0);for(auto&&x:a)res+=x;return res;}template<typename T>ll suma(const V<V<T>>&a){ll res(0);for(auto&&x:a)res+=suma(x);return res;}template<typename T>void uni(T& a){sort(rng(a));a.erase(unique(rng(a)),a.end());}template<typename T>void prepend(vector<T>&a,const T&x){a.insert(a.begin(),x);}const int INF = 1001001001;const ll INFL = 3e18;const int MAX = 2e6+5;#endif