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