[APIO2016]划艇
题目描述
在首尔城中,汉江横贯东西。在汉江的北岸,从西向东星星点点地分布着 NNN 个划艇学校,编号依次为 111 到 NNN。每个学校都拥有若干艘划艇。同一所学校的所有划艇颜色相同,不同的学校的划艇颜色互不相同。颜色相同的划艇被认为是一样的。每个学校可以选择派出一些划艇参加节日的庆典,也可以选择不派出任何划艇参加。如果编号为 iii 的学校选择派出划艇参加庆典,那么,派出的划艇数量可以在 aia_iai 至 bib_ibi 之间任意选择(ai≤bia_i \leq b_iai≤bi)。
值得注意的是,编号为 iii 的学校如果选择派出划艇参加庆典,那么它派出的划艇数量必须大于任意一所编号小于它的学校派出的划艇数量。
输入所有学校的 ai,bia_i,b_iai,bi 的值,求出参加庆典的划艇有多少种可能的情况,必须有至少一艘划艇参加庆典。两种情况不同当且仅当有参加庆典的某种颜色的划艇数量不同。
输入输出格式
输入格式:
第一行包括一个整数 NNN,表示学校的数量。
接下来 NNN 行,每行包括两个正整数,用来描述一所学校。其中第 iii 行包括的两个正整数分别表示 ai,bia_i,b_iai,bi(1≤ai≤bi≤1091 \leq a_i \leq b_i \leq 10^91≤ai≤bi≤109)。
输出格式:
输出一行,一个整数,表示所有可能的派出划艇的方案数除以 1,000,000,0071,000,000,0071,000,000,007 得到的余数。
输入输出样例
2
1 2
2 3
7
说明
【样例解释】
在只有一所学校派出划艇的情况下有 444 种方案,两所学校都派出划艇的情况下有 333 种方案,所以答案为 777。
【数据范围】
子任务 111(999 分):1≤N≤5001 \leq N \leq 5001≤N≤500 且对于所有的 1≤i≤N1 \leq i \leq N1≤i≤N,保证 ai=bia_i=b_iai=bi。
子任务 222(222222 分):1≤N≤5001 \leq N \leq 5001≤N≤500 且 ∑i=1N(bi−ai)≤106\sum_{i=1}^N (b_i-a_i) \leq 10^6∑i=1N(bi−ai)≤106。
子任务 333(272727 分):1≤N≤1001 \leq N \leq 1001≤N≤100。
子任务 444(424242 分):1≤N≤5001 \leq N \leq 5001≤N≤500。
http://m.blog.csdn.net/qq_22541499/article/details/51674707这个博客说的很清楚
组合数部分很难理解,建议手推一下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int Mod=;
typedef long long lol;
lol A[],f[][],len[];
lol a[],b[],ge[],n,cnt;
int main()
{lol i,j,k;
cin>>n;
A[]=;
for (i=;i<=n;i++)
{
A[i]=(Mod-Mod/i)*A[Mod%i]%Mod;
}
for (i=;i<=n;i++)
{
scanf("%lld%lld",&a[i],&b[i]);
ge[i]=a[i];ge[n+i]=b[i]+;
}
sort(ge+,ge+*n+);
for (i=;i<*n;i++)
{
if (ge[i]==ge[i+])
ge[i]=2e9;
}
sort(ge+,ge+*n+);
cnt=*n;
while (ge[cnt]==2e9) cnt--;
for (i=;i<=n;i++)
{
a[i]=upper_bound(ge,ge+cnt+,a[i])-ge;
b[i]=upper_bound(ge,ge+cnt+,b[i])-ge;
//cout<<a[i]<<' '<<b[i]<<endl;
}
for (i=;i<=cnt;i++)
{
f[][i]=;
if (i)
len[i]=ge[i]-ge[i-];
}
for (i=;i<=n;i++)
{
f[i][]=;
for (j=a[i];j<=b[i];j++)
{
f[i][j]=(f[i-][j-]*len[j])%Mod;
lol c=len[j]-,now=;
for (k=i-;k;k--)
{
if (j>=a[k]&&j<=b[k])
{
now++;
c=((c*(len[j]+now-)%Mod)*A[now])%Mod;
if (!c) break;
f[i][j]+=(f[k-][j-]*c)%Mod;
f[i][j]%=Mod;
}
}
}
for (j=;j<=cnt;j++)
{
f[i][j]=(f[i][j]+f[i-][j]+f[i][j-]-f[i-][j-]+Mod)%Mod;
}
}
cout<<(f[n][cnt]-+Mod)%Mod;
}
[APIO2016]划艇的更多相关文章
- [洛谷P3643] [APIO2016]划艇
洛谷题目链接:[APIO2016]划艇 题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 \(N\) 个划艇学校,编号依次为 \(1\) 到 \(N\).每个学校都拥有若干艘 ...
- P3643 [APIO2016]划艇
P3643 [APIO2016]划艇 题意 一个合法序列可表示为一个长度为 \(n\) 的序列,其中第 \(i\) 个数可以为 0 或 \([l_i,r_i]\) 中一个整数,且满足所有不为零的数组成 ...
- BZOJ4584 & 洛谷3643 & UOJ204:[APIO2016]划艇——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4584 https://www.luogu.org/problemnew/show/P3643 ht ...
- 题解 P3643 [APIO2016]划艇
题解 一种思路很好想:\(f_{i,j}\) 表示前 \(i\) 所学校中,第 \(i\) 所学校参赛且派出 \(j\) 艘划艇的方案数.(转移就不列了.) 这种方式有一个致命点,就是 \(j\) 的 ...
- 洛谷 P3643 - [APIO2016]划艇(dp)
题面传送门 一道难度中等的 \(dp\)(虽然我没有想出来/kk). 首先一眼 \(dp_{i,j}\) 表示考虑到第 \(i\) 个学校,第 \(i\) 个学校派出了 \(j\) 个划艇的方案数,转 ...
- 洛谷P3643 [APIO2016]划艇(组合数学)
题面 传送门 题解 首先区间个数很少,我们考虑把所有区间离散化(这里要把所有的右端点变为\(B_i+1\)代表的开区间) 设\(f_{i,j}\)表示考虑到第\(i\)个学校且第\(i\)个学校必选, ...
- [组合][DP]luogu P3643 [APIO2016]划艇
题面 https://www.luogu.com.cn/problem/P3643 对于一个序列,第i项可取的值在{0}∪[ai,bi]之间,求使序列非零部分单调递增的方案数 分析 设 $f[i][j ...
- Codeforces Educational Round 81 解题报告
前置扯淡 赛前:这场\(Div2\)呀,那我写\(3\)题就行,\(D\)题尽力就好 赛中:啊啊,\(ABC\)我全过了\(pretest\),我太强了!!这把上蓝稳了 赛后:\(woc\),为啥被\ ...
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
随机推荐
- 利用python处理文档中各字段出现的次数并排序
import string path = 'waldnn' with open(path,'r') as text: words = [raw_word.strip(string.punctuatio ...
- Struts2之配置文件中Action的详细配置
在Struts2之配置一文中,我们知道一个struts配置文件可以分为三部分:常量配置 包含其他配置文件的配置 Action配置 . 这其中 常量配置 和 包含其他配置文件的配置 二 ...
- [USACO13JAN] Seating
https://www.luogu.org/problem/show?pid=3071 题目描述 To earn some extra money, the cows have opened a re ...
- 第二篇:利用shell脚本执行webservice请求——基于soap
1. 项目背景 以往我们在开发基于webservice的项目中,我们总习惯于直接使用webservice的一些框架,如Axis,axis2和Xfire等.框架的好处是将webservice所涉及到的s ...
- 常用Mysql数据库操作语句
用户管理: 1.新建用户: 语法msyql>CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username - 你将创建 ...
- wamp的mysql设置用户名和密码
wamp下修改mysql root用户的登录密码 感谢作者:http://www.3lian.com/edu/2014/02-25/131010.html 1.安装好wam ...
- Windows 的Apache支持SSI配置
配置SSI什么是shtml? 使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为"服务器端嵌入"或 ...
- Sphinx主索引和增量索引来实现索引实时更新的关键步骤
1.配置csft.conf文件 vim /etc/csft.conf # # Minimal Sphinx configuration sample (clean, simple, functiona ...
- 【笔记】HybridApp中使用Promise化的JS-Bridge
背景: HybridApp,前端采用JS-bridge的方式调用Native的接口,如获取设备信息.拍照.人脸识别等 前端封装了调用库,每次调用Native接口,需要进行两步操作(1.在window下 ...
- iot:下一步要做的工作
1.DeviceMessage抽象(定义&支持扩展)2.createDeviceMessage.analyseDeviceMessage(支持扩展)3.日志打印4.错误处理5.断线重连6.交互 ...