提出 #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
結果
AC × 4
AC × 46
セット名 テストケース
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