大整数拆分
由 1 ~ n-1 这 n-1 个数组成 l - c 到 r - c 闭区间内的数共有多少种组合方法.
对于20%的数据: 1≤N≤50;
对于50%的数据: 1≤N≤2000;
对于100%的数据: 1≤N≤100000, 1≤C≤1000000,C≤L≤R<C+N
https://blog.csdn.net/bigwinner888/article/details/104201358
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int M=998244353; int f[2][100005],n,c,l,r,s; int main() { freopen("hack.in","r",stdin); freopen("hack.out","w",stdout); cin>>n>>c>>l>>r; l-=c;r-=c; f[0][0]=1; for(int i=1;(1+i)*i/2<=r;i++) { for(int j=(1+i)*i/2;j<=r;j++) { f[i&1][j]=(f[i&1][j-i]+f[(i-1)&1][j-i])%M; if(l<=j&&j<=r) s=(s+f[i&1][j])%M; } memset(f[(i-1)&1],0,sizeof(f[(i-1)%1])); } cout<<s%M<<endl; return 0; }