4584: [Apio2016]赛艇

Time Limit: 70 Sec  Memory Limit: 256 MB
[Submit][Status][Discuss]

Description

在首尔城中,汉江横贯东西。在汉江的北岸,从西向东星星点点地分布着个划艇学校,编号依次为到。每个学校都
拥有若干艘划艇。同一所学校的所有划艇颜色相同,不同的学校的划艇颜色互不相同。颜色相同的划艇被认为是一
样的。每个学校可以选择派出一些划艇参加节日的庆典,也可以选择不派出任何划艇参加。如果编号为的学校选择
派出划艇参加庆典,那么,派出的划艇数量可以在Ai至Bi之间任意选择(Ai<=Bi)。值得注意的是,编号为i的学
校如果选择派出划艇参加庆典,那么它派出的划艇数量必须大于任意一所编号小于它的学校派出的划艇数量。输入
所有学校的Ai、Bi的值,求出参加庆典的划艇有多少种可能的情况,必须有至少一艘划艇参加庆典。两种情况不同
当且仅当有参加庆典的某种颜色的划艇数量不同
 

Input

第一行包括一个整数N,表示学校的数量。接下来N行,每行包括两个正整数,用来描述一所学校。其中第行包括的

两个正整数分别表示Ai,Bi(1<=Ai<=Bi<=10^9),N<=500

Output

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

Sample Input

2

1 2

2 3

Sample Output

7

HINT

 

Source

BZOJ链接

UOJ链接

看dalao博客弄懂的 链接

 #include<bits/stdc++.h>

 using namespace std;

 const long long INF = ;

 const int MAXN = ;
long long n, p, top, ans;
long long inv[MAXN];
long long a[MAXN], b[MAXN], l[MAXN], r[MAXN];
long long h[MAXN + MAXN];
long long C[MAXN], g[MAXN];
map<long long, int> k; template <typename tn> void read (tn & a) {
tn x = , f = ; char c = getchar();
while (c < '' || c > '') { if (c == '-') f = -; c = getchar(); }
while (c >= '' && c <= '') { x = x * + c - ''; c = getchar(); }
a = f == ? x : -x;
} void get_inv() {
inv[] = ;
for (int i = ; i <= n; ++i) {
inv[i] = - ( inv[INF % i] * (INF / i) ) % INF;
while (inv[i] < ) inv[i] += INF;
}
} int main() {
read(n);
get_inv();
for (int i = ; i <= n; ++i) {
read(a[i]);
read(b[i]);
++b[i];
h[i + i - ] = a[i];
h[i + i] = b[i];
}
sort(h + , h + + n + n);
top = unique(h + , h + n + n + ) - h - ;
for (int i = ; i <= top; ++i) {
k[h[i]] = i;
}
for (int i = ; i <= n; ++i) {
l[i] = k[a[i]];
r[i] = k[b[i]];
}
// cout << top << "\n";
// for (int i = 1; i <= top; ++i) cout << h[i]<<" ";
// for (int i = 1; i <= n; ++i) cout << l[i]<<" "<<r[i]<<"\n";
g[] = ;
for (int j = ; j <= top; ++j) {
int L = h[j + ] - h[j];
C[] = ;
// cerr<<"j = "<<j<<"\n";
for (int i = ; i <= n; ++i) {
C[i] = C[i - ] * (L + i - ) % INF * inv[i] % INF;
// cerr<<i<<" "<<C[i]<<"\n";
}
for (int i = n; i > ; --i) {
if (l[i] <= j && r[i] > j) {
long long f = , m = , c = L;
for (int p = i - ; p >= ; --p) {
f = (f + c * g[p]) % INF;
if (l[p] <= j && r[p] >= j + ) {
c = C[++m];
}
}
g[i] = (g[i] + f) % INF;
}
}
}
for (int i = ; i <= n; ++i) ans = (ans + g[i]) % INF;
printf("%lld\n", ans);
return ;
}

BZOJ 4584 luogu P3643: [Apio2016]赛艇的更多相关文章

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

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

  2. 【BZOJ4584】[Apio2016]赛艇 DP

    [BZOJ4584][Apio2016]赛艇 Description 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着个划艇学校,编号依次为到.每个学校都拥有若干艘划艇.同一所学校的所 ...

  3. BZOJ 3052/Luogu P4074 [wc2013]糖果公园 (树上带修莫队)

    题面 中文题面,难得解释了 BZOJ传送门 Luogu传送门 分析 树上带修莫队板子题... 开始没给分块大小赋初值T了好一会... CODE #include <bits/stdc++.h&g ...

  4. BZOJ 3931 / Luogu P3171 [CQOI2015]网络吞吐量 (最大流板题)

    题面 中文题目,不解释: BZOJ传送门 Luogu传送门 分析 这题建图是显然的,拆点后iii和i′i'i′连容量为吞吐量的边,根据题目要求,111和nnn的吞吐量看作∞\infty∞. 然后用di ...

  5. BZOJ 3894 / Luogu P4313 文理分科 (拆点最小割)

    题面 中文题面- BZOJ 传送门 Luogu 传送门 分析 这道题类似于BZOJ 3774 最优选择,然后这里有一篇博客写的很好- Today_Blue_Rainbow's Blog 应该看懂了吧- ...

  6. BZOJ 2039 / Luogu P1791 [2009国家集训队]employ人员雇佣 (最小割)

    题面 BZOJ传送门 Luogu传送门 分析 考虑如何最小割建图,因为这仍然是二元关系,我们可以通过解方程来确定怎么建图,具体参考论文 <<浅析一类最小割问题 湖南师大附中 彭天翼> ...

  7. BZOJ 2127 / Luogu P1646 [国家集训队]happiness (最小割)

    题面 BZOJ传送门 Luogu传送门 分析 这道题又出现了二元关系,于是我们只需要解方程确定怎么连边就行了 假设跟SSS分在一块是选文科,跟TTT分在一块是选理科,先加上所有的收益,再来考虑如何让需 ...

  8. [BZOJ 1535] [Luogu 3426]SZA-Template (KMP+fail树+双向链表)

    [BZOJ 1535] [Luogu 3426]SZA-Template (KMP+fail树+双向链表) 题面 Byteasar 想在墙上涂一段很长的字符,他为了做这件事从字符的前面一段中截取了一段 ...

  9. [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)

    [BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...

随机推荐

  1. angular2升级到angular4历程

    Angular 4 在昨天(2017-03-24)正式发布了,我的系列教程也得更新一下.步骤略繁琐,不用 cli 的项目反倒更简单一些,但是 cli 平时给我们的便利还是很多的,升级最多半年一次而已. ...

  2. Linux:Ubuntu系统的安装

    好久没更了,今天就更完这一期的Linux系统吧,这次主要安装的是常用Linux系统的之一:Ubuntu(乌班图)系统,这个系统和CentOS 7的安装步骤也是类似的,(我不采取用虚拟机的方法来安装,当 ...

  3. [Ajax] 如何使用Ajax传递多个复选框的值

    HTML+JavaScript代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  4. ubuntu 网络配置

    检查网络配置命令:ifconfig 一.通过配置文件配置 新手没怎么用过Ubuntu,所以走了不少弯路,网上找了很多方法,大都没对我起到帮助作用,所以把自己的配置方法写一写. Ubuntu上连了两块网 ...

  5. JAVA SFTP文件上传、下载及批量下载

    JavaJsch  1.jsch官方API查看地址(附件为需要的jar) http://www.jcraft.com/jsch/ 2.jsch简介 JSch(Java Secure Channel)是 ...

  6. linux 内存使用情况详解

    一:首先是先登录 二:查看当前目录 命令:df -h 三:查看具体文件夹占用情况 命令:du --max-depth=1 -h  /data/ 或者:为了快算显示,同时也只是想查看目录整体占用大小 命 ...

  7. Unity C#图片转换二进制流、字符串互转

    图片转二进制流转换图片互转 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  8. JavaScript常见的继承方式

    原型链机制: 在ECMAscript中描述了原型链的概念,并将原型链作为实现继承的主要方法,其基本思想就是利用原型让一个引用类型继承另一个引用类型的属性和方法. 构造函数和原型还有实例之间的关系: 每 ...

  9. jquery中filter的用法

    一.filter的参数类型可分为两种 1.传递选择器 $('a').filter('.external') 2.传递过滤函数 $('a').filter(function(index) {       ...

  10. Arduino SD卡 列出文件

    /* SD卡测试 这个例子展示了如何使用实用程序库 sd库是基于获取您的SD卡的信息. 非常有用的测试卡,当你不确定它是否工作. 电路: *附在SPI总线上的SD卡如下: * MOSI引脚11上的Ar ...