题目描述

在首尔城中,汉江横贯东西。在汉江的北岸,从西向东星星点点地分布着 NNN 个划艇学校,编号依次为 111 到 NNN。每个学校都拥有若干艘划艇。同一所学校的所有划艇颜色相同,不同的学校的划艇颜色互不相同。颜色相同的划艇被认为是一样的。每个学校可以选择派出一些划艇参加节日的庆典,也可以选择不派出任何划艇参加。如果编号为 iii 的学校选择派出划艇参加庆典,那么,派出的划艇数量可以在 aia_ia​i​​ 至 bib_ib​i​​ 之间任意选择(ai≤bia_i \leq b_ia​i​​≤b​i​​)。

值得注意的是,编号为 iii 的学校如果选择派出划艇参加庆典,那么它派出的划艇数量必须大于任意一所编号小于它的学校派出的划艇数量。

输入所有学校的 ai,bia_i,b_ia​i​​,b​i​​ 的值,求出参加庆典的划艇有多少种可能的情况,必须有至少一艘划艇参加庆典。两种情况不同当且仅当有参加庆典的某种颜色的划艇数量不同。

输入输出格式

输入格式:

第一行包括一个整数 NNN,表示学校的数量。

接下来 NNN 行,每行包括两个正整数,用来描述一所学校。其中第 iii 行包括的两个正整数分别表示 ai,bia_i,b_ia​i​​,b​i​​(1≤ai≤bi≤1091 \leq a_i \leq b_i \leq 10^91≤a​i​​≤b​i​​≤10​9​​)。

输出格式:

输出一行,一个整数,表示所有可能的派出划艇的方案数除以 1,000,000,0071,000,000,0071,000,000,007 得到的余数。

输入输出样例

输入样例#1:

2
1 2
2 3
输出样例#1:

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_ia​i​​=b​i​​。

子任务 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=1​N​​(b​i​​−a​i​​)≤10​6​​。

子任务 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这个博客说的很清楚

组合数部分很难理解,建议手推一下

很玄学的是我用数组排序判重离散WA
改成STL set就AC了,回头还要改一下
已改完,为二分错误
以防万一,以后遇到一些奇怪的二分还是用upper_bound
 #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]划艇的更多相关文章

  1. [洛谷P3643] [APIO2016]划艇

    洛谷题目链接:[APIO2016]划艇 题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 \(N\) 个划艇学校,编号依次为 \(1\) 到 \(N\).每个学校都拥有若干艘 ...

  2. P3643 [APIO2016]划艇

    P3643 [APIO2016]划艇 题意 一个合法序列可表示为一个长度为 \(n\) 的序列,其中第 \(i\) 个数可以为 0 或 \([l_i,r_i]\) 中一个整数,且满足所有不为零的数组成 ...

  3. BZOJ4584 & 洛谷3643 & UOJ204:[APIO2016]划艇——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4584 https://www.luogu.org/problemnew/show/P3643 ht ...

  4. 题解 P3643 [APIO2016]划艇

    题解 一种思路很好想:\(f_{i,j}\) 表示前 \(i\) 所学校中,第 \(i\) 所学校参赛且派出 \(j\) 艘划艇的方案数.(转移就不列了.) 这种方式有一个致命点,就是 \(j\) 的 ...

  5. 洛谷 P3643 - [APIO2016]划艇(dp)

    题面传送门 一道难度中等的 \(dp\)(虽然我没有想出来/kk). 首先一眼 \(dp_{i,j}\) 表示考虑到第 \(i\) 个学校,第 \(i\) 个学校派出了 \(j\) 个划艇的方案数,转 ...

  6. 洛谷P3643 [APIO2016]划艇(组合数学)

    题面 传送门 题解 首先区间个数很少,我们考虑把所有区间离散化(这里要把所有的右端点变为\(B_i+1\)代表的开区间) 设\(f_{i,j}\)表示考虑到第\(i\)个学校且第\(i\)个学校必选, ...

  7. [组合][DP]luogu P3643 [APIO2016]划艇

    题面 https://www.luogu.com.cn/problem/P3643 对于一个序列,第i项可取的值在{0}∪[ai,bi]之间,求使序列非零部分单调递增的方案数 分析 设 $f[i][j ...

  8. Codeforces Educational Round 81 解题报告

    前置扯淡 赛前:这场\(Div2\)呀,那我写\(3\)题就行,\(D\)题尽力就好 赛中:啊啊,\(ABC\)我全过了\(pretest\),我太强了!!这把上蓝稳了 赛后:\(woc\),为啥被\ ...

  9. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

随机推荐

  1. JAVA设计模式之【装饰者模式】

    JAVA设计模式之[装饰者模式] 装饰模式 对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮.更温馨.更实用. 在软件设计中,对已有对象(新房)的功能进行扩展(装修). 把通用功能封装在装 ...

  2. C语言第一次博客作业---顺序机构基础练习

    一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...

  3. B-dya6

    1.昨天的困难,今天解决的进度,以及明天要做的事情 昨天的困难:在导入导出方面遇到了困难,导出的文件不能直接导入. 今天解决的进度:完成了登录页面的背景设计,并再次测试了整个系统的功能. 明天要做的事 ...

  4. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.16

    第一次会议:2017-11-16 大家的任务完成的不错^_^,继续努力了. 上图: 忘记照了,额....... 会议主要内容: 1.登录功能的讨论 2. 代码统一 具体分工: 成员 计划任务 遇见难题 ...

  5. 《高级软件测试》11.15.全组完成jira安装,开始任务的部分书写

    今日任务完成情况如下: 小段:完成linux环境上jira的安装,并将jira的安装过程录制下来 小费:完成linux环境下jira的安装,开始部分任务的书写 小高:完成了jira的安装,并进一步熟悉 ...

  6. 搭建vue项目环境

    前言 在开发本项目之前,我对vue,react,angular等框架了解,仅限于知道它们是什么框架,他们的核心是什么,但是并没有实际使用过(angular 1.0版本用过,因为太难用,所以对这类框架都 ...

  7. raid5 / raid5e / raid5ee的性能对比及其数据恢复原理

    RAID 5 是一种存储性能.数据安全和存储成本兼顾的存储解决方案. RAID 5可以理解为是RAID 0和RAID 1的折中方案.RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低 ...

  8. EasyUI导航栏。

    html: <div data-options="region:'west',split:true" title="导航栏菜单" style=" ...

  9. angular2 学习笔记 ( 第3方插件 jQuery and ckeditor )

    refer : https://forums.meteor.com/t/importing-ckeditor-using-npm/28919/2   (ckeditor) https://github ...

  10. jQuery serialize()方法获取不到数据,alert结果为空

    网上查找,问题可能是 id有重复 经排查,没有发现重复id 解决方案 form表单中每个input框都没有name属性,添加name属性即可 若name属性与jQuery的关键字有冲突,也可导致该问题 ...