結果
問題 | No.2048 L(I+D)S |
ユーザー |
![]() |
提出日時 | 2024-12-30 16:59:17 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 6 ms / 2,000 ms |
コード長 | 2,318 bytes |
コンパイル時間 | 1,814 ms |
コンパイル使用メモリ | 167,124 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-30 16:59:42 |
合計ジャッジ時間 | 2,652 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 16 |
ソースコード
#include<bits/stdc++.h>#define pb push_back#define SZ(x) (int)(x).size()using namespace std;const int N=1e5+5,mod=998244353;typedef long long ll;template<class T> T mksm(T x,ll y){T z={1};while(y){if(y&1)z=z*x;x=x*x,y>>=1;}return z;}template<unsigned P=0> struct mint{unsigned v;static unsigned mod;mint()=default;template<class T> mint(T x){x%=(signed)getmod(),v=x<0?x+getmod():x;}static unsigned getmod(){return P>0?P:mod;}static void setmod(unsigned m){mod=m;}mint operator+() const{return *this;}mint operator-() const{return mint(0)-*this;}mint inv() const{return assert(v),mksm(*this,getmod()-2);}mint &operator+=(const mint &q){(v+=q.v)<getmod()||(v-=getmod());return *this;}mint &operator-=(const mint &q){(v-=q.v)<getmod()||(v+=getmod());return *this;}mint &operator*=(const mint &q){v=1ull*v*q.v%getmod();return *this;}mint &operator/=(const mint &q){v=1ull*v*q.inv().v%getmod();return *this;}friend mint operator+(mint p,const mint &q){return p+=q;}friend mint operator-(mint p,const mint &q){return p-=q;}friend mint operator*(mint p,const mint &q){return p*=q;}friend mint operator/(mint p,const mint &q){return p/=q;}friend bool operator==(const mint &p,const mint &q){return p.v==q.v;}friend bool operator!=(const mint &p,const mint &q){return p.v!=q.v;}friend bool operator<(const mint &p,const mint &q){return p.v<q.v;}friend bool operator>(const mint &p,const mint &q){return p.v>q.v;}friend bool operator<=(const mint &p,const mint &q){return p.v<=q.v;}friend bool operator>=(const mint &p,const mint &q){return p.v>=q.v;}friend istream &operator>>(istream &is,mint &a){is>>a.v;return is;}friend ostream &operator<<(ostream &os,const mint &a){os<<a.v;return os;}};template<> unsigned mint<0>::mod=998244353;typedef mint<mod> MI;int n;MI fc[N],ifc[N],iv[N],ans;inline void init(int n){fc[0]=1;for(int i=1;i<=n;i++)fc[i]=fc[i-1]*i;ifc[n]=1/fc[n];for(int i=n;i;i--)ifc[i-1]=ifc[i]*i;iv[1]=1;for(int i=2;i<=n;i++)iv[i]=iv[mod%i]*(mod-mod/i);}inline MI C(int x,int y){if(x<y||y<0)return 0;return fc[x]*ifc[y]*ifc[x-y];}inline MI sqr(MI x){return x*x;}signed main(){ios::sync_with_stdio(0);cin.tie(0);cin>>n;init(n);for(int i=2;i<n-1;i++)ans+=sqr(fc[n]*ifc[i-2]*ifc[n-i-2]*iv[i]*iv[n-i]*iv[n-1]);cout<<ans<<'\n';return 0;}