这题也太卡常了吧
查看原帖
这题也太卡常了吧
142549
hbhz_zcy楼主2022/11/14 11:22

现在已经调不出来了,哪位好心人能帮我看看。

//g++ d.cpp -o d -g -std=c++14 -O0 -Wall -fsanitize=undefined
#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
const int maxn=2010,maxk=50,mod=998244353;
int N,K,al[maxn],ar[maxn];LL f[2][maxn][maxn],g[maxn][maxn],jc[maxn][maxn];
int qd(){
	int rt=0,ng=0;char c=getchar();
	while(c<'0'||c>'9')  ng^=c=='-',c=getchar();
	while('0'<=c&&c<='9')  rt=(rt<<3)+(rt<<1)+c-48,c=getchar();
	return ng?-rt:rt;
}
int main(){
	freopen("in.txt","r",stdin);
	N=qd(),K=qd();for(int i=1;i<=N;i++){int x=qd();al[i]=max(0,x-K),ar[i]=min(x+K,i);}
	for(int i=1;i<=N;i++){for(int j=0;j<i;j++)  jc[i][j]=1;for(int j=i;j<=N;j++)  jc[i][j]=1LL*jc[i][j-1]*j%mod;}
	f[0][0][0]=1;
	for(int i=0;i<=N;i++){
		int op=i&1,_op=op^1;
//		printf("i=%d:\n",i);
		for(int k=al[i];k<=ar[i];k++)  for(int j=k;j<=i;j++)  f[op][j][k]=(f[op][j][k]+g[j][k])%mod,g[j][k+1]=(g[j][k+1]+1LL*(j-k)*g[j][k])%mod;
//		for(int k=0;k<=N;k++)  for(int j=k;j<=N;j++)  f[op^1][j][k]=g[j][k]=0;
//		for(int k=max(0,a[i]-K);k<=min(a[i]+K,N);k++)  for(int j=k;j<=i;j++)  f[op][j][k]=(f[op][j][k]+g[j][k])%mod;
		for(int k=al[i+1];k<=ar[i+1];k++)  for(int j=k;j<=i;j++)  f[_op][j][k]=g[j][k]=0;
		for(int k=al[i];k<=ar[i];k++){
			for(int j=k;j<=i;j++){
//				printf("j=%d,k=%d : %d\n",j,k,f[op][j][k]);
				f[_op][j][k]=(f[_op][j][k]+1LL*j*f[op][j][k])%mod;
				f[_op][j+1][k]=(f[_op][j+1][k]+f[op][j][k])%mod;
//				g[j+1][k+1]=(g[j+1][k+1]+f[op][j][k])%mod;
				if(k+1>=al[i+1])  g[j+1][k+1]=(g[j+1][k+1]+f[op][j][k])%mod;
				else if(j+2>al[i+1])  g[j+1][al[i+1]]=(g[j+1][al[i+1]]+1LL*jc[j+2-al[i+1]][j-k]*f[op][j][k])%mod;
			}
		}
//		for(int k=0;k<=N;k++)  for(int j=k;j<=i+1;j++)  g[j][k+1]=(g[j][k+1]+1LL*(j-k)*g[j][k])%mod;
//		for(int k=max(0,a[i]-K);k<=min(a[i]+K+1,N);k++)  for(int j=k;j<=N;j++)  g[j][k+1]=(g[j][k+1]+1LL*(j-k)*g[j][k])%mod;
	}
	int ans=0;for(int k=al[N];k<=ar[N];k++)  for(int j=k;j<=N;j++)  ans=(ans+1LL*f[N&1][j][k]*jc[N-j+1][N-k])%mod;
	printf("%d\n",ans);
	return 0;
}
2022/11/14 11:22
加载中...