結果
| 問題 |
No.2605 Pickup Parentheses
|
| コンテスト | |
| ユーザー |
inksamurai
|
| 提出日時 | 2024-01-13 03:25:07 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 122 ms / 2,000 ms |
| コード長 | 1,613 bytes |
| コンパイル時間 | 7,953 ms |
| コンパイル使用メモリ | 258,304 KB |
| 最終ジャッジ日時 | 2025-02-18 19:34:42 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 68 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
#define int ll
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define rng(i,c,n) for(int i=c;i<n;i++)
#define fi first
#define se second
#define pb push_back
#define sz(a) (int)a.size()
#define vec(...) vector<__VA_ARGS__>
#define _4aNWZeC ios::sync_with_stdio(0),cin.tie(0)
using ll=long long;
using pii=pair<int,int>;
using vi=vector<int>;
void print(){cout<<'\n';}
template<class h,class...t>
void print(const h&v,const t&...u){cout<<v<<' ',print(u...);}
using namespace atcoder;
using mint=modint998244353;
const int _n=5e5;
mint fact[_n+11],invfact[_n+11];
void initfact(){
fact[0]=1;
rng(i,1,_n){
fact[i]=fact[i-1]*mint(i);
}
invfact[_n-1]=fact[_n-1].inv();
per(i,_n-1){
invfact[i]=invfact[i+1]*mint(i+1);
}
}
mint cnk(ll k,ll n){
return k>n?0:fact[n]*invfact[k]*invfact[n-k];
}
mint f(int n){
return cnk(n,2*n)-cnk(n+1,2*n);
}
void slv(){
int n,q;
cin>>n>>q;
vi xs;
rep(i,q){
int l,r;
cin>>l>>r;
l-=1;
if((r-l)%2==0){
xs.pb(r-l);
}
}
if(n%2){
print(0);
return;
}
int si=sz(xs);
using vm=vec(mint);
auto rec=[&](auto self,int l,int r)->vm{
if(l>r){
return vm{1};
}
if(l==r){
vm res(xs[l]/2+1);
res[0]=1;
res[xs[l]/2]=-f(xs[l]/2);
return res;
}
int m=(l+r)/2;
return convolution(self(self,l,m),self(self,m+1,r));
};
vm c=rec(rec,0,si-1);
mint ans=0;
for(int i=0;i<sz(c);i++){
// print(i,c[i].val());
ans+=f((n-i*2)/2)*c[i];
}
// print(f(xs[0]/2).val());
print(ans.val());
}
signed main(){
_4aNWZeC;
initfact();
slv();
}
inksamurai