申请加强此题数据
查看原帖
申请加强此题数据
549855
Limie楼主2024/3/8 18:57

以下代码可以冲过去

#include<bits/stdc++.h>
using namespace std;
int mod=1e8+7;
int dp[1000005];
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,s,a,b;
	cin>>n>>s>>a>>b;
	dp[0]=1;
	for(int i=1;i<n;i++)
		for(int j=(i*(i+1))/2;j>=i;j--)
				dp[j]=(dp[j]+dp[j-i])%mod;
	int ans=0;
	for(int i=0;i<=(n*(n-1))/2;i++)
	{
		long long xa=i;
		long long xb=(n-1)*n/2-xa;
		long long ss=xa*a-xb*b;
		if((s%n+n)%n==(ss%n+n)%n)
			(ans+=dp[xa])%=mod;
	}
	cout<<ans;
}

容易看出是 O(n3)O(n^3) 的,常数 16\frac{1}{6} 左右,显然是可以卡掉的

2024/3/8 18:57
加载中...