BZOJ 1630/2023 Ant Counting 数蚂蚁

Posted on 2016-11-16 20:42  ziliuziliu  阅读(131)  评论(0编辑  收藏  举报

DP.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100050
#define mod 1000000
using namespace std;
int n,m,l,r,sum[2][maxn],cnt[maxn],x;
int main()
{
    scanf("%d%d%d%d",&n,&m,&l,&r);
    for (int i=1;i<=m;i++)
    {
        scanf("%d",&x);
        cnt[x]++;
    }
    for (int i=0;i<=m;i++) sum[0][i]=1;
    for (int i=1;i<=n;i++)
        for (int j=0;j<=m;j++)
        {
            int ret;
            if (j>=cnt[i]+1) ret=(sum[i&1^1][j]-sum[i&1^1][j-cnt[i]-1]+mod)%mod;
            else ret=sum[i&1^1][j];
            sum[i&1][j]=(sum[i&1][j-1]+ret)%mod;
        }
    printf("%d\n",(sum[n&1][r]-sum[n&1][l-1]+mod)%mod);
    return 0;
}