bzoj 3398 牡牛和牝牛

来源:互联网 发布:数码淘宝店铺简介 编辑:程序博客网 时间:2024/04/27 19:10
牝(pin 4声) 母的意思。
牡(mu 3声) 公的意思。
看到这些字我直接愣了,其实放在牝鸡司晨和牡蛎这两个词里我绝对能认出来。(是不是该去颓语文了?)
这道题
f[i]表示最后一个是公牛的方案数,=sigma(f[j])(j<i-k) 然后前缀和优化即可。
问题是hzwer用了奇怪的排列组合。
这道题可以用隔板法,设abcd是放公牛的位置,那么a,b-k,c-2*k,d-3*k单调递增,可以用隔板法解决。再想一想那个可以重复位置放的隔板法,就是a,b+1,c+2,d+3单调递增。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>

#define md 5000011
#define ll long long
#define inf (int) 1e9
#define eps 1e-8
#define N 100010
using namespace std;
int f[N],sum[N];
int main()
{
int n,K;
scanf("%d%d",&n,&K); K++;
f[0]=sum[0]=1;
for (int i=1;i<=n;i++)
{
int j=i-K;
if (j<0) f[i]=1; else f[i]=sum[j];
sum[i]=(f[i]+sum[i-1])%md;
}
printf("%d\n",sum[n]);
return 0;
}


0 0