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. NodeJS的Cluster模块使用

    一.前言大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,有人开发了第三方的cluster,让node可以利用多核CPU实现并行. 随着n ...

  2. 王爽汇编语言(第三版)环境搭建(附PDF及工具下载)

    一.前言 最近在学习汇编语言,使用的是读者评价非常高的王爽老师写的<汇编语言>(第三版),为了适应现在各个版本的windows操作系统,所以采用VMWare虚拟机来搭建纯DOS环境. 二. ...

  3. 常用的JQ函数

    /// <reference path="jquery-1.8.0.min.js"> /* * DIV或元素居中 * @return */ jQuery.fn.mCen ...

  4. ubuntu服务器远程连接xshell,putty,xftp的简单使用教程

    当你自己千辛万苦终于搞到一个服务器(ubuntu(linux)系统的)之后,却不知道怎么进行时,xshell,putty,xftp是个很不错的选择 xshell和xftp是win下访问ubuntu(l ...

  5. sql查询调优之where条件排序字段以及limit使用索引的奥秘

       奇怪的慢sql 我们先来看2条sql 第一条: select * from acct_trans_log WHERE  acct_id = 1000000000009000757 order b ...

  6. 【canvas系列】用canvas实现一个colorpicker

    每个浏览器都有自己的特点,比如今天要做的colorpicker就是,一千个浏览器,一千个哈姆雷特,一千个colorpicker.今天canvas系列就用canvas做一个colorpicker. ** ...

  7. UI进阶 即时通讯之XMPP登录、注册

    1.XMPP环境搭建 http://www.cnblogs.com/fearlessyyp/p/5506644.html 第一次打开可能会有点儿慢,图片很多,步骤很详细,祝搭建成功. 2.工程中添加X ...

  8. iOS Foundation框架 -1.常用结构体的用法和输出

    1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...

  9. Javascript面对对象. 第五篇

    继承 继承是面向对象中一个核心的概念.其他正统面向对象语言都会用两种方式实现继承: 一个是接口实现,一个是继承. 而ECMAScript只支持继承,不支持接口实现,而实现继承的方式依靠原型链完成. / ...

  10. WP8.1程序开发,可视树VisualTreeHelper类的使用

    对于可视树的使用,很久之前就接触了, 一方面当时知识太浅根本看不懂,就放下没看了: 另一方面,也没用到,就没往这方面努力研究学习: 现在好了,遇到问题了,正好涉及到VisualTreeHelper的使 ...