2023: [Usaco2005 Nov]Ant Counting 数蚂蚁

Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 85  Solved: 40
[Submit][Status][Discuss]

Description

    有一天,贝茜无聊地坐在蚂蚁洞前看蚂蚁们进进出出地搬运食物.很快贝茜发现有些蚂蚁长得几乎一模一样,于是她认为那些蚂蚁是兄弟,也就是说它们是同一个家族里的成员.她也发现整个蚂蚁群里有时只有一只出来觅食,有时是几只,有时干脆整个蚁群一起出来.这样一来,蚂蚁们出行觅食时的组队方案就有很多种.作为一头有数学头脑的奶牛,贝茜注意到整个蚂蚁群由T(1≤T≤1000)个家族组成,她将这些家族按1到T依次编号.编号为i的家族里有Ni(1≤Ni≤100)只蚂蚁.同一个家族里的蚂蚁可以认为是完全相同的.
    如果一共有S,S+1….,B(1≤S≤B≤A)只蚂蚁一起出去觅食,它们一共能组成多少种不同的队伍呢?注意:只要两支队伍中所包含某个家族的蚂蚁数不同,我们就认为这两支队伍不同.由于贝茜无法分辨出同一家族的蚂蚁,所以当两支队伍中所包含的所有家族的蚂蚁数都相同时,即使有某个家族换了几只蚂蚁出来,贝茜也会因为看不出不同而把它们认为是同一支队伍.    比如说,有个由3个家族组成的蚂蚁群里一共有5只蚂蚁,它们所属的家族分别为1,1,2,2,3.于是出去觅食时它们有以下几种组队方案:
  ·1只蚂蚁出去有三种组合:(1)(2)(3)
  ·2只蚂蚁出去有五种组合:(1,1)(1,2)(1,3)(2,2)(2,3)
  ·3只蚂蚁出去有五种组合:(1,1,2)(1,1,3)(1,2,2)(1,2,3)(2,2,3)
  ·4只蚂蚁出去有三种组合:(1,2,2,3)(1,1,2,2)(1,1,2,3)
  ·5只蚂蚁出去有一种组合:(1,1,2,2,3)
    你的任务就是根据给出的数据,计算蚂蚁们组队方案的总数.

Input

    第1行:4个用空格隔开的整数T,A,S,B.
    第2到A+1行:每行是一个正整数,为某只蚂蚁所在的家族的编号.

Output

 
    输出一个整数,表示当S到B(包括S和B)只蚂蚁出去觅食时,不同的组队方案数.
    注意:组合是无序的,也就是说组合1,2和组合2,1是同一种组队方式.最后的答案可能很大,你只需要输出答案的最后6位数字.注意不要输出前导0以及多余的空格.

Sample Input

3 5 2 3
1
2
2
1
3

Sample Output

10
样例说明
2只蚂蚁外出有5种组合,3只蚂蚁外出有5种组合.共有10种组合

HINT

Source

题解:首先显然是个DP,而且是个经典题,以蚂蚁数和最靠后的家族数为转移即可,可是这样子问题来了——这样子的数据规模(1000家族×100只蚂蚁=100000只,再加上×1000家族,这样子非得MLE不可),于是又被雷到了,直到看到了hzwer神犇的博客(OTLhzwer,传送门),发现实际上数组神马的可以滚动存储,而至于最后求某一段的和只需要弄个前缀和数组即可。。。OTLorz,感觉自己渣渣哒

(还有BZOJ双倍经验果断好评如潮!!!^_^)

 /**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ {/**************************************************************
Problem: 1630
User: HansBug
Language: Pascal
Result: Accepted
Time:184 ms
Memory:2588 kb
****************************************************************/} const p=;
var
i,j,k,l,m,n,r:longint;
a:array[..] of longint;
b,c:array[..,..] of longint;
begin
readln(n,m,l,r);
fillchar(a,sizeof(a),);
for i:= to m do
begin
readln(j);
inc(a[j]);
end;
b[,]:=;
for i:= to m do c[,i]:=;
for i:= to n do
for j:= to m do
begin
inc(b[i mod ,j],c[(i-) mod ,j]);
if (j-a[i]-)>= then dec(b[i mod ,j],c[(i-) mod ,j-a[i]-]);
b[i mod ,j]:=b[i mod ,j] mod p;
if j<> then
c[i mod ,j]:=(c[i mod ,j-]+b[i mod ,j]) mod p
else
c[i mod ,j]:=b[i mod ,j] mod p;
b[(i-) mod ,j]:=;
end;
writeln(((c[n mod ,r]-c[n mod ,l-]) mod p+p) mod p);
readln;
end.

1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁的更多相关文章

  1. BZOJ 2023 [Usaco2005 Nov]Ant Counting 数蚂蚁:dp【前缀和优化】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2023 题意: 有n个家族,共m只蚂蚁(n <= 1000, m <= 1000 ...

  2. 【bzoj2023/1630】[Usaco2005 Nov]Ant Counting 数蚂蚁 dp

    题解: 水题 f[i][j] 前i种用了j个,前缀和优化就可以了

  3. bzoj 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁【生成函数||dp】

    用生成函数套路推一推,推完老想NTT--实际上把这个多项式乘法看成dp然后前缀和优化一下即可 #include<iostream> #include<cstdio> using ...

  4. BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁

    2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 56  Solved: 16[S ...

  5. bzoj2023[Usaco2005 Nov]Ant Counting 数蚂蚁*&&bzoj1630[Usaco2007 Demo]Ant Counting*

    bzoj2023[Usaco2005 Nov]Ant Counting 数蚂蚁&&bzoj1630[Usaco2007 Demo]Ant Counting 题意: t个族群,每个族群有 ...

  6. bzoj1630 / bzoj2023 [Usaco2005 Nov]Ant Counting 数蚂蚁

    Description     有一天,贝茜无聊地坐在蚂蚁洞前看蚂蚁们进进出出地搬运食物.很快贝茜发现有些蚂蚁长得几乎一模一样,于是她认为那些蚂蚁是兄弟,也就是说它们是同一个家族里的成员.她也发现整个 ...

  7. BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(dp)

    题意 题目描述的很清楚...  有一天,贝茜无聊地坐在蚂蚁洞前看蚂蚁们进进出出地搬运食物.很快贝茜发现有些蚂蚁长得几乎一模一样,于是她认为那些蚂蚁是兄弟,也就是说它们是同一个家族里的成员.她也发现整个 ...

  8. 【noi 2.6_9289】Ant Counting 数蚂蚁{Usaco2005 Nov}(DP)

    题意:有M个家族的蚂蚁,各Ni只(互相相同).问选出 l~r 只的不同方案数. 解法:很基础的一种DP,不要被"排列组合"所迷惑了啊~我之前接触过这个类型,可惜又忘了,一定要记住! ...

  9. BZOJ 1630/2023 Ant Counting 数蚂蚁

    DP. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

随机推荐

  1. 记一次DG搭建过程中ORA-09925: Unable to createaudit trail file 错误

    今天做Oracle DG  编写initorcl的时候,修改完以后,sqlplus就不能再登陆,一直报 ERROR: ORA-09925: Unable to createaudit trail fi ...

  2. enum 用法

    public enum WeekDay { SUN(, "Sunday", "SUN"), MON(, "Monday", "MO ...

  3. margin三个值

    http://www.cnblogs.com/wangkongming/p/3204734.html margin标记可以带一个.二个.三个.四个参数,各有不同的含义. margin: 20px;(上 ...

  4. 告诉你 IOS9.0 之后的Bitcode到底是什么!!

    用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: ld: ‘/Users/**/Framework/SDKs/PolymerPa ...

  5. 关于nodejs express4.X框架不支持layout模板的问题解决

    网上有有种方法是安装express-partials模块,然后在 app.set(‘view engine’, ‘ejs’); 这句后面加上app.use(partials());但是,经过我的反复尝 ...

  6. MongoDB学习总结(五) —— 安全认证

    作为数据库软件,我们要确保数据的安全,不是谁都可以访问的,所以mongodb也像其他的数据库软件一样可以采用用户验证的方法, mongodb 3.0之前的版本提供了addUser方法向不同的数据库添加 ...

  7. winform连接oracle时Oracle.DataAccess.dll版本问题

    1.通用TestOracle.zip部署到iis上,或直接运行程序测试当前全局程序集 protected void Button1_Click(object sender, EventArgs e) ...

  8. DataReader的用法程序简析

    // 2015/07/05 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  9. 关于C# XmlDocument方法Load加载流后自动释放流的解决方法

    在实际应用doc.Load(Request.InputStream)的时候,doc.Load方法内置默认释放流 造成再次度Request.InputStream的时候,代码报错 替换方法: XmlDo ...

  10. BZOJ 1085: [SCOI2005]骑士精神(A*算法)

    第一次写A*算法(这就是A*?如果这就是A*的话,那不就只是搜索的一个优化了= =,不过h函数如果弄难一点真的有些难设计) 其实就是判断t+h(x)(t为当前步数,h(x)为达到当前状态的最小步数) ...