QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#168007#6410. Classical DP ProblemxuzhihaodedieWA 2ms7636kbC++201.5kb2023-09-07 19:45:362023-09-07 19:45:36

Judging History

你现在查看的是最新测评结果

  • [2023-09-07 19:45:36]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:7636kb
  • [2023-09-07 19:45:36]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define x first
//#define y second
#define PII pair<int,int>
const int N=1e5+10;
const int mod=998244353;
int a[N],b[N];
int dp[5005][5005];
int dp1[5005][5005];
int qpow(int a,int b) {
	if(b==0) return 1;
	if(b&1) return a*qpow(a,b-1)%mod;
	else {
		int mul=qpow(a,b/2);
		return mul*mul%mod;
	} 
}
void add(int &x,int y) {
	x+=y;
	if(x>=mod) x-=mod;
}
void solve() {
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	reverse(a+1,a+n+1);
	int k=0;
	int res=1;
	for(int i=1;i<=n;i++) {
		if(a[i]>=i) {
			k=i;
		}
	}
	for(int i=1;i<=k;i++) res=res*i%mod;
	//cout<<k<<" ";
	int t=0;
	if(k==n) t=a[k];
	else t=a[k+1];
	dp[0][0]=1;
	for(int i=0;i<k;i++) {
		for(int j=0;j<=t;j++) {
			if(j+1<=t) add(dp[i+1][j+1],(t-j)*dp[i][j]%mod);
			add(dp[i+1][j],(j+a[i+1]-t)*dp[i][j]%mod);
		}
	}
	int ret=dp[k][t];
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=a[i];j++) {
			b[j]++;
		}
	}
	for(int i=1;i<=n;i++) a[i]=b[i];
	dp1[0][0]=1;
	if(k==n) t=a[k];
	else t=a[k+1];
	for(int i=0;i<k;i++) {
		for(int j=0;j<=t;j++) {
			if(j+1<=t) add(dp1[i+1][j+1],(t-j)*dp1[i][j]%mod);
			add(dp1[i+1][j],(j+a[i+1]-t)*dp1[i][j]%mod);
		}
	} 
	//cout<<ret<<" "<<dp1[k][t]<<endl;
	int ans=(ret+dp1[k][t]-res+mod)%mod;
	cout<<k<<" "<<ans<<endl;
}
signed main() {
	int T=1;
	//cin>>T;
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	while(T--) {
		solve();
	}
}

详细

Test #1:

score: 100
Accepted
time: 2ms
memory: 7448kb

input:

3
1 2 3

output:

2 6

result:

ok 2 number(s): "2 6"

Test #2:

score: 0
Accepted
time: 1ms
memory: 7636kb

input:

1
1

output:

1 1

result:

ok 2 number(s): "1 1"

Test #3:

score: 0
Accepted
time: 2ms
memory: 7516kb

input:

2
1 1

output:

1 2

result:

ok 2 number(s): "1 2"

Test #4:

score: -100
Wrong Answer
time: 1ms
memory: 7552kb

input:

2
2 2

output:

2 2

result:

wrong answer 2nd numbers differ - expected: '6', found: '2'