题目描述

在首尔城中,汉江横贯东西。在汉江的北岸,从西向东星星点点地分布着 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. 用C语言协助办公_01 找出所有不对劲的人

    近期想出一系列用C语言协助办公的视频教程,这是第一个.具体的移步:https://chuanke.baidu.com/v6658388-240377-1789288.html

  2. 四则运算----C++版

    一.设计思想 因java中已做过,就是简单的将java中的语句调换为C++的语句. 二.代码 #include<iostream.h> #include<Stdlib.h> v ...

  3. 使用Python定制词云

    一.实验介绍 1.1 实验内容 在互联网时代,人们获取信息的途径多种多样,大量的信息涌入到人们的视线中.如何从浩如烟海的信息中提炼出关键信息,滤除垃圾信息,一直是现代人关注的问题.在这个信息爆炸的时代 ...

  4. Django Haystack 全文检索与关键词高亮

    Django Haystack 简介 django-haystack 是一个专门提供搜索功能的 django 第三方应用,它支持 Solr.Elasticsearch.Whoosh.Xapian 等多 ...

  5. 从集合的无序性看待关系型数据库中的"序"

    本文目录:1.集合的特征2.集合的无序性3.表中记录的无序性4.集合的"序"和物理存储顺序之间的关系5.查询结果(虚拟表)的无序性.随机性6.为什么总是强调"无序&quo ...

  6. 数据结构与算法 —— 链表linked list(02)

    我们继续来看链表的第二道题,来自于leetcode: 两数相加 给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了 ...

  7. LightningChart最新版 v.8.3 全新发布,新功能使用教程。

    LightningChart最新版v.8.3全新发布,主要介绍以下五个新功能及使用教程.   1. 网格模型,三角鼠标追踪 Tracing MeshModels with mouse. Traced ...

  8. kubernetes入门(04)kubernetes的核心概念(1)

    一.ReplicationController/ReplicaSet 在Kubernetes集群中,ReplicationController能够确保在任意时刻,指定数量的Pod副本正在运行.如果Po ...

  9. cmd编译运行java

    新建.java结尾的文件 内容 public class hello{ public static void main(String[] args){ System.out.println(" ...

  10. JavaScript实现接口的三种经典方式

    /* 接口:提供一种说明一个对象应该有哪些方法的手段 js中有三种方式实现接口: 1 注释描述接口 2 属性检测接口 3 鸭式辨型接口 */ /* 1 注释描述接口: 不推荐 优点: 利用注解,给出参 ...