提出 #69906067


ソースコード 拡げる

/*
*            /$$           /$$
*           |__/          |__/
*  /$$$$$$$$ /$$ /$$$$$$$$ /$$  /$$$$$$
* |____ /$$/| $$|____ /$$/| $$ /$$__  $$
*    /$$$$/ | $$   /$$$$/ | $$| $$  \ $$
*   /$$__/  | $$  /$$__/  | $$| $$  | $$
*  /$$$$$$$$| $$ /$$$$$$$$| $$|  $$$$$$$
* |________/|__/|________/|__/ \____  $$
*                                   | $$
*                                   | $$
*                                   |__/
*/
//hj23308保佑我
//Missile保佑我
/*
* 醒了在梦里挣扎,不觉黯淡了朝霞
*/
/*
* 我很高兴你没有忘了我,但是我现在更希望你已经忘了我了。
* 希望在你的记忆中,我只是尘土一撮,从你的全世界路过,然后四散飞扬不留下一点痕迹,而你要不回头的往前走。
* 我更希望我只是从你的全世界路过,只是路过
*/
/*
* 只是我在十字路口守了太久,守到黄沙如雨掩埋一切痕迹,才发现自己等的人已经离开了。
*/
/*
* 听我的 别回头 回头就可能会泪流满面,会被黄沙掩埋,所以即使痛苦也要向前走
*/
/*
* 我听到了「天行健」的回响,这是一个伟大斗士的不息自强;
* 我听到了「破万法」的回响,这是一个黑道打手的守护欲望;
* 我看见了「生生不息」的激荡,这是一个骗子的伟大乐章!
*/
/*
* 我用虚假的面具照顾着细腻的感情;
* 我以华丽的衣物下藏着腐烂的血肉;
* 当我摘下面具,褪去衣物,即便是我最亲近的人,也无法直视我
*/
#include<bits/stdc++.h>
using namespace std;
mt19937 engine(chrono::steady_clock().now().time_since_epoch().count());
const int MOD=998244353;
const int MAXN=105;
void AddC(int &x,int y)
{
	if((x+=y)>=MOD) x-=MOD;
}
int Mul(int x,int y)
{
	return 1ll*x*y%MOD;
}
int n,x;
long long res;
int pre,a[MAXN],sum[MAXN];
long long fac[MAXN],ifac[MAXN];
int f[MAXN][MAXN*MAXN],g[MAXN][MAXN*MAXN];
long long qpow(long long u,long long k)
{
	long long Ans=1;
	while(k) {
		if(k&1) Ans=Ans*u%MOD;
		k/=2;
		u=u*u%MOD;
	}
	return Ans;
}
long long inv(long long u)
{
	return qpow(u,MOD-2);
}
long long C(int N,int M)
{
	return fac[N]*ifac[M]%MOD*ifac[N-M]%MOD;
}
void Init()
{
	fac[0]=ifac[0]=1;
	for(int i=1;i<=n;i++) {
		fac[i]=fac[i-1]*i%MOD;
		ifac[i]=ifac[i-1]*inv(i)%MOD;
	}
}
void update(int pos,int tmp)
{
	memcpy(g,f,sizeof(g)),memset(f,0,sizeof(f));
	for(int i=0;i<=n;i++) {
		for(int j=0;j<=n*n;j++) {
			int val=g[i][j];
			if(!val) continue;
			int use=pos-1-(pre-tmp-i);
			for(int k=0;k<=min(tmp,use);k++) {
				int Val=Mul(val,Mul(Mul(C(use,k),C(tmp,k)),fac[k]));
				if(i) AddC(f[i+tmp-k-1][j+i],Mul(i,Val)); 
				if(tmp-k) AddC(f[i+tmp-k-1][j+i],Mul(tmp-k,Val));
				AddC(f[i+tmp-k][j+i],Val);
			}
		}
	}
//	for(int i=0;i<=n;i++) {
//		for(int j=0;j<=n*n;j++) {
//			if(f[i][j]) cout<<i<<" , "<<j<<" : "<<f[i][j]<<"\n";
//		}
//	}
//	cout<<"-------------\n";
}
int solve()
{
	f[0][0]=1;
	for(int i=1;i<=n;i++) {
		pre+=sum[i];
		update(i,sum[i]);
	}
	res-=1ll*n*(n-1)/2;
	int Ans=0;
	for(int j=0;j<=n*n;j++) {
		if(res+j<=x) AddC(Ans,f[0][j]);
	}
	return Ans;
}
int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>x;
	for(int i=1;i<=n;i++) {
		cin>>a[i];
		res+=a[i];
		sum[min(a[i]+1,n)]++;
	}
	Init();
	cout<<solve()<<"\n";
	return 0;
}
/*
input:
3 1
0 1 2
output:
3
*/

提出情報

提出日時
問題 A - Affinity for Artifacts
ユーザ Ziziq
言語 C++ 20 (gcc 12.2)
得点 800
コード長 3540 Byte
結果 AC
実行時間 164 ms
メモリ 12680 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 800 / 800
結果
AC × 3
AC × 47
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
All hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, sample_01.txt, sample_02.txt, sample_03.txt, small_01.txt, small_02.txt, small_03.txt, small_04.txt, small_05.txt, small_06.txt, small_07.txt, small_08.txt, small_09.txt, small_10.txt, small_11.txt, small_12.txt, small_13.txt, small_14.txt, small_15.txt, small_16.txt, small_17.txt, small_18.txt, small_19.txt, small_20.txt
ケース名 結果 実行時間 メモリ
hand_01.txt AC 132 ms 12552 KiB
hand_02.txt AC 150 ms 12536 KiB
hand_03.txt AC 153 ms 12516 KiB
hand_04.txt AC 159 ms 12528 KiB
random_01.txt AC 155 ms 12544 KiB
random_02.txt AC 153 ms 12556 KiB
random_03.txt AC 143 ms 12544 KiB
random_04.txt AC 159 ms 12556 KiB
random_05.txt AC 142 ms 12608 KiB
random_06.txt AC 142 ms 12528 KiB
random_07.txt AC 149 ms 12420 KiB
random_08.txt AC 146 ms 12556 KiB
random_09.txt AC 143 ms 12420 KiB
random_10.txt AC 164 ms 12552 KiB
random_11.txt AC 101 ms 12548 KiB
random_12.txt AC 45 ms 12600 KiB
random_13.txt AC 21 ms 12548 KiB
random_14.txt AC 9 ms 12548 KiB
random_15.txt AC 86 ms 12556 KiB
random_16.txt AC 50 ms 12532 KiB
random_17.txt AC 24 ms 12552 KiB
random_18.txt AC 9 ms 12680 KiB
random_19.txt AC 107 ms 12532 KiB
random_20.txt AC 48 ms 12548 KiB
sample_01.txt AC 6 ms 12544 KiB
sample_02.txt AC 7 ms 12416 KiB
sample_03.txt AC 14 ms 12624 KiB
small_01.txt AC 10 ms 12416 KiB
small_02.txt AC 10 ms 12544 KiB
small_03.txt AC 9 ms 12540 KiB
small_04.txt AC 9 ms 12552 KiB
small_05.txt AC 9 ms 12552 KiB
small_06.txt AC 9 ms 12556 KiB
small_07.txt AC 9 ms 12528 KiB
small_08.txt AC 9 ms 12608 KiB
small_09.txt AC 9 ms 12592 KiB
small_10.txt AC 9 ms 12608 KiB
small_11.txt AC 9 ms 12540 KiB
small_12.txt AC 9 ms 12596 KiB
small_13.txt AC 10 ms 12532 KiB
small_14.txt AC 10 ms 12628 KiB
small_15.txt AC 9 ms 12524 KiB
small_16.txt AC 9 ms 12416 KiB
small_17.txt AC 10 ms 12544 KiB
small_18.txt AC 9 ms 12552 KiB
small_19.txt AC 10 ms 12420 KiB
small_20.txt AC 10 ms 12600 KiB