結果

問題 No.2048 L(I+D)S
ユーザー vjudge1vjudge1
提出日時 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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,248 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 2 ms
5,248 KB
testcase_04 AC 1 ms
5,248 KB
testcase_05 AC 2 ms
5,248 KB
testcase_06 AC 2 ms
5,248 KB
testcase_07 AC 2 ms
5,248 KB
testcase_08 AC 5 ms
5,248 KB
testcase_09 AC 3 ms
5,248 KB
testcase_10 AC 3 ms
5,248 KB
testcase_11 AC 6 ms
5,248 KB
testcase_12 AC 4 ms
5,248 KB
testcase_13 AC 2 ms
5,248 KB
testcase_14 AC 3 ms
5,248 KB
testcase_15 AC 2 ms
5,248 KB
testcase_16 AC 6 ms
5,248 KB
testcase_17 AC 6 ms
5,248 KB
testcase_18 AC 6 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0