Submission #42726804


Source Code Expand

#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ldb double
template<typename T>void ckmn(T&a,T b){a=min(a,b);}
template<typename T>void ckmx(T&a,T b){a=max(a,b);}
void rd(int&x){scanf("%i",&x);}
void rd(ll&x){scanf("%lld",&x);}
void rd(char*x){scanf("%s",x);}
void rd(ldb&x){scanf("%lf",&x);}
void rd(string&x){scanf("%s",&x);}
template<typename T1,typename T2>void rd(pair<T1,T2>&x){rd(x.first);rd(x.second);}
template<typename T>void rd(vector<T>&x){for(T&i:x)rd(i);}
template<typename T,typename...A>void rd(T&x,A&...args){rd(x);rd(args...);}
template<typename T>void rd(){T x;rd(x);return x;}
int ri(){int x;rd(x);return x;}
template<typename T>vector<T> rv(int n){vector<T> x(n);rd(x);return x;}
template<typename T>void ra(T a[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]);}
template<typename T1,typename T2>void ra(T1 a[],T2 b[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]),rd(b[st+i]);}
template<typename T1,typename T2,typename T3>void ra(T1 a[],T2 b[],T3 c[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]),rd(b[st+i]),rd(c[st+i]);}
void re(vector<int> E[],int m,bool dir=0){for(int i=0,u,v;i<m;++i){rd(u,v);E[u].pb(v);if(!dir)E[v].pb(u);}}
template<typename T>void re(vector<pair<int,T>> E[],int m,bool dir=0){for(int i=0,u,v;i<m;++i){T w;rd(u,v,w);E[u].pb({v,w});if(!dir)E[v].pb({u,w});}}

const int mod=998244353;
int add(int a,int b){a+=b;return a>=mod?a-mod:a;}
void ckadd(int&a,int b){a=add(a,b);}
int sub(int a,int b){a-=b;return a<0?a+mod:a;}
void cksub(int&a,int b){a=sub(a,b);}
int mul(int a,int b){return (ll)a*b%mod;}
void ckmul(int&a,int b){a=mul(a,b);}
int powmod(int x,int k){int ans=1;for(;k;k>>=1,ckmul(x,x))if(k&1)ckmul(ans,x);return ans;}
int inv(int x){return powmod(x,mod-2);}

const int N=505;
int F[N],I[N];
int binom(int n, int k){
	if(n<k||k<0)return 0;
	return mul(F[n],mul(I[k],I[n-k]));
}
void calc()
{
	F[0]=1;
	for(int i=1;i<N;i++) F[i]=mul(F[i-1],i);
	I[N-1]=inv(F[N-1]);
	for(int i=N-2;~i;i--) I[i]=mul(I[i+1],i+1);
}

//pair<int,int> dp[N];
int dp[N][N],nxt[N][N];
int d[N],psum[N];
int fw[N];
int main(){
	calc();

	int n=ri();
	for(int i=1;i<=n;i++){
		rd(d[i]);
	}
	d[1]--;
	fw[0]=1;
	for(int i=1;i<=n;i++){
		psum[i]=psum[i-1]+d[i];
		fw[i]=mul(fw[i-1],binom(psum[i],d[i]));
	}

	dp[0][0]=1;
	int sm=0,tot=0;

	//printf("trees:%i\n",fw[n]);

	int ans=fw[n];
	for(int i=n;i>=2;i--){
		if(d[i]==0){
			ckadd(ans,fw[n]);
			//printf("i:%i leaf add:%i\n",i,fw[n]);
		}else{
			for(int j=0;j<=sm;j++){
				for(int c=0;c<=tot;c++){
					if(j+d[i]-1 == (c+1)-2){
						//int was=ans;
						ckadd(ans,mul(mul(dp[j][c],binom((c+1)-2,d[i]-1)),mul(fw[i-1],binom(psum[i-1]+sm-j,psum[i-1]))));
						//printf("i:%i j:%i c:%i add:%i\n",i,j,c,ans-was);
					}
				}
			}
		}

		sm+=d[i];
		tot++;
		for(int j=0;j<=sm;j++){
			for(int c=0;c<=tot;c++){
				ckadd(nxt[j][c],mul(dp[j][c],binom(sm-j,d[i])));
				if(j+d[i]<=sm && c+1<=tot){
					ckadd(nxt[j+d[i]][c+1],mul(dp[j][c],binom(j+d[i],d[i])));
				}
			}
		}

		for(int j=0;j<=sm;j++){
			for(int c=0;c<=tot;c++){
				dp[j][c]=nxt[j][c];
				nxt[j][c]=0;
			}
		}
	}
	printf("%i\n",ans);
	return 0;
}

Submission Info

Submission Time
Task D - Smallest Vertices
User TadijaSebez
Language C++ (GCC 9.2.1)
Score 700
Code Size 3380 Byte
Status AC
Exec Time 300 ms
Memory 5776 KiB

Compile Error

./Main.cpp: In function ‘void rd(std::string&)’:
./Main.cpp:17:27: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘std::string*’ {aka ‘std::__cxx11::basic_string<char>*’} [-Wformat=]
   17 | void rd(string&x){scanf("%s",&x);}
      |                          ~^  ~~
      |                           |  |
      |                           |  std::string* {aka std::__cxx11::basic_string<char>*}
      |                           char*
./Main.cpp: In function ‘void rd(int&)’:
./Main.cpp:13:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   13 | void rd(int&x){scanf("%i",&x);}
      |                ~~~~~^~~~~~~~~
./Main.cpp: In function ‘void rd(long long int&)’:
./Main.cpp:14:20: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   14 | void rd(ll&x){scanf("%lld",&x);}
      |               ~~~~~^~~~~~~~~~~
./Main.cpp: In function ‘void rd(char*)’:
./Main.cpp:15:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   15 | void rd(char*x){scanf("%s",x);}
      |                 ~~~~~^~~~~~~~
./Main.cpp: In function ‘void rd(double&)’:
./Main.cpp:16:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   16 | void rd(ldb&x){scanf("%lf",&x);}
      |                ~~~~~^~~~~~~~~~
./Main.cpp: In function ‘void rd(std::string&)’:
./Main.cpp:17:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   17 | void rd(string&x){scanf("%s",&x);}
      |                   ~~~~~^~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 2
AC × 19
Set Name Test Cases
Sample 00_sample_01.txt, 00_sample_02.txt
All 00_sample_01.txt, 00_sample_02.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 8 ms 3756 KiB
00_sample_02.txt AC 3 ms 3772 KiB
01_test_01.txt AC 2 ms 3564 KiB
01_test_02.txt AC 2 ms 3776 KiB
01_test_03.txt AC 2 ms 3780 KiB
01_test_04.txt AC 2 ms 3548 KiB
01_test_05.txt AC 2 ms 3684 KiB
01_test_06.txt AC 284 ms 5740 KiB
01_test_07.txt AC 236 ms 5476 KiB
01_test_08.txt AC 232 ms 5480 KiB
01_test_09.txt AC 231 ms 5412 KiB
01_test_10.txt AC 288 ms 5624 KiB
01_test_11.txt AC 296 ms 5632 KiB
01_test_12.txt AC 300 ms 5620 KiB
01_test_13.txt AC 299 ms 5624 KiB
01_test_14.txt AC 292 ms 5776 KiB
01_test_15.txt AC 293 ms 5572 KiB
01_test_16.txt AC 292 ms 5756 KiB
01_test_17.txt AC 290 ms 5584 KiB