提出 #59211670
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) rng(i,0,b)
#define gnr(i,a,b) for(int i=int(b)-1;i>=int(a);i--)
#define per(i,b) gnr(i,0,b)
#define pb push_back
#define eb emplace_back
#define a first
#define b second
#define bg begin()
#define ed end()
#define all(x) x.bg,x.ed
#define si(x) int(x.size())
#ifdef LOCAL
#define dmp(x) cerr<<__LINE__<<" "<<#x<<" "<<x<<endl
#else
#define dmp(x) void(0)
#endif
template<class t,class u> bool chmax(t&a,u b){if(a<b){a=b;return true;}else return false;}
template<class t,class u> bool chmin(t&a,u b){if(b<a){a=b;return true;}else return false;}
template<class t> using vc=vector<t>;
template<class t> using vvc=vc<vc<t>>;
using P=pair<int,int>;
using vi=vc<int>;
const uint mod=998244353;
struct mint{
uint v;
mint(ll vv=0){s(vv%mod+mod);}
mint& s(uint vv){
v=vv<mod?vv:vv-mod;
return *this;
}
mint operator-()const{return mint()-*this;}
mint& operator+=(const mint&r){return s(v+r.v);}
mint&operator-=(const mint&r){return s(v+mod-r.v);}
mint&operator*=(const mint&r){v=(unsigned long long)v*r.v%mod;return *this;}
mint&operator/=(const mint&r){return *this*=r.inv();}
mint operator+(const mint&r)const{return mint(*this)+=r;}
mint operator-(const mint&r)const{return mint(*this)-=r;}
mint operator*(const mint&r)const{return mint(*this)*=r;}
mint operator/(const mint&r)const{return mint(*this)/=r;}
mint pow(ll n)const{
if(n<0)return inv().pow(-n);
mint res(1),x(*this);
while(n){
if(n&1)res*=x;
x*=x;
n>>=1;
}
return res;
}
mint inv()const{return pow(mod-2);}
};
#define SIZE 600005
mint inv[SIZE],fac[SIZE],finv[SIZE];
void make()
{
fac[0]=fac[1]=1;
finv[0]=finv[1]=1;
inv[1]=1;
for(int i=2;i<SIZE;i++){
inv[i]=-inv[mod%i]*(mod/i);
fac[i]=fac[i-1]*i;
finv[i]=finv[i-1]*inv[i];
}
}
mint C(int a,int b)
{
if(a<b) return 0;
return fac[a]*(finv[b]*finv[a-b]);
}
void solve(){/*
int n=100;
vc<mint> coef(n);
coef[1]=1;
for(int i=2;i<n;i++){
mint s=0;
for(int j=1;j<i;j++) s+=coef[j]*coef[i-j];
coef[i]=s;
}
for(int i=1;i<=10;i++) cout<<coef[i].v<<",";cout<<endl;*/
make();
int n;
cin>>n;
vc<int> A(n);
for(int i=0;i<n;i++) cin>>A[i];
mint ret=0;
int r=1;
for(int i=0;i<n;i++){
r--;
for(int j=0;j<A[i];j++){
if(r>=0){
int c=n-i-1;
if(r<=c){
if(r==c) ret+=1;
else{
ret+=C(2*c-r-1,c-1)-C(2*c-r-1,c);
}
}
}
r++;
}
//cout<<r<<" "<<ret.v<<endl;
if(r<0||r>n-i-1) break;
if(r==0){
if(i==n-1) ret+=1;
break;
}
}
cout<<ret.v<<endl;
}
int main(){
cin.tie(0);
ios::sync_with_stdio(0);
cout<<fixed<<setprecision(20);
int T=1;
while(T--) solve();
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - Polish Mania |
| ユーザ | yutaka1999 |
| 言語 | C++ 23 (Clang 16.0.6) |
| 得点 | 900 |
| コード長 | 2839 Byte |
| 結果 | AC |
| 実行時間 | 22 ms |
| メモリ | 11284 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 900 / 900 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | example.txt, example_2.txt, example_3.txt, example_4.txt |
| All | example.txt, example_2.txt, example_3.txt, example_4.txt, max.txt, min.txt, random.txt, random_10.txt, random_2.txt, random_3.txt, random_4.txt, random_5.txt, random_6.txt, random_7.txt, random_8.txt, random_9.txt, random_small.txt, random_small_10.txt, random_small_2.txt, random_small_3.txt, random_small_4.txt, random_small_5.txt, random_small_6.txt, random_small_7.txt, random_small_8.txt, random_small_9.txt, random_tree.txt, random_tree_10.txt, random_tree_2.txt, random_tree_3.txt, random_tree_4.txt, random_tree_5.txt, random_tree_6.txt, random_tree_7.txt, random_tree_8.txt, random_tree_9.txt, random_tree_minus_one.txt, random_tree_minus_one_10.txt, random_tree_minus_one_2.txt, random_tree_minus_one_3.txt, random_tree_minus_one_4.txt, random_tree_minus_one_5.txt, random_tree_minus_one_6.txt, random_tree_minus_one_7.txt, random_tree_minus_one_8.txt, random_tree_minus_one_9.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| example.txt | AC | 8 ms | 10480 KiB |
| example_2.txt | AC | 8 ms | 10484 KiB |
| example_3.txt | AC | 7 ms | 10460 KiB |
| example_4.txt | AC | 8 ms | 10520 KiB |
| max.txt | AC | 22 ms | 11284 KiB |
| min.txt | AC | 8 ms | 10488 KiB |
| random.txt | AC | 22 ms | 11248 KiB |
| random_10.txt | AC | 10 ms | 10532 KiB |
| random_2.txt | AC | 19 ms | 10948 KiB |
| random_3.txt | AC | 13 ms | 10556 KiB |
| random_4.txt | AC | 10 ms | 10492 KiB |
| random_5.txt | AC | 21 ms | 10948 KiB |
| random_6.txt | AC | 20 ms | 10872 KiB |
| random_7.txt | AC | 12 ms | 10448 KiB |
| random_8.txt | AC | 21 ms | 11260 KiB |
| random_9.txt | AC | 17 ms | 10684 KiB |
| random_small.txt | AC | 10 ms | 10560 KiB |
| random_small_10.txt | AC | 11 ms | 10660 KiB |
| random_small_2.txt | AC | 19 ms | 10948 KiB |
| random_small_3.txt | AC | 19 ms | 11032 KiB |
| random_small_4.txt | AC | 9 ms | 10536 KiB |
| random_small_5.txt | AC | 10 ms | 10468 KiB |
| random_small_6.txt | AC | 15 ms | 11000 KiB |
| random_small_7.txt | AC | 18 ms | 10944 KiB |
| random_small_8.txt | AC | 21 ms | 11140 KiB |
| random_small_9.txt | AC | 14 ms | 10768 KiB |
| random_tree.txt | AC | 14 ms | 10680 KiB |
| random_tree_10.txt | AC | 11 ms | 10600 KiB |
| random_tree_2.txt | AC | 10 ms | 10484 KiB |
| random_tree_3.txt | AC | 21 ms | 11144 KiB |
| random_tree_4.txt | AC | 10 ms | 10536 KiB |
| random_tree_5.txt | AC | 11 ms | 10440 KiB |
| random_tree_6.txt | AC | 18 ms | 10872 KiB |
| random_tree_7.txt | AC | 10 ms | 10532 KiB |
| random_tree_8.txt | AC | 8 ms | 10556 KiB |
| random_tree_9.txt | AC | 8 ms | 10720 KiB |
| random_tree_minus_one.txt | AC | 14 ms | 10752 KiB |
| random_tree_minus_one_10.txt | AC | 18 ms | 11032 KiB |
| random_tree_minus_one_2.txt | AC | 15 ms | 10688 KiB |
| random_tree_minus_one_3.txt | AC | 16 ms | 10752 KiB |
| random_tree_minus_one_4.txt | AC | 10 ms | 10600 KiB |
| random_tree_minus_one_5.txt | AC | 8 ms | 10552 KiB |
| random_tree_minus_one_6.txt | AC | 13 ms | 10464 KiB |
| random_tree_minus_one_7.txt | AC | 9 ms | 10608 KiB |
| random_tree_minus_one_8.txt | AC | 8 ms | 10532 KiB |
| random_tree_minus_one_9.txt | AC | 8 ms | 10608 KiB |