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. 给学习Linux系统小白的两三个建议

    前段时间看过一个针对国内Linux使用情况的调研表,有了不少感慨.现在听说过linux,会一点linux基本操作的人多如牛毛,然而真正能用linux做一点事情的确少之又少.无论是公司还是学校,办公基本 ...

  2. .net core Kestrel宿主服务器自定义监听端口配置

    在.net core的web程序中,除了可以在项目中硬编码服务器的监听端口外,还可以在外部通过json文件配置. 方法如下: 第一步:在项目中新建一个名为Hosting.json的文件.当然,文件名可 ...

  3. SQL-45 将titles_test表名修改为titles_2017。

    题目描述 将titles_test表名修改为titles_2017.CREATE TABLE IF NOT EXISTS titles_test (id int(11) not null primar ...

  4. 入门项目 A5-3 interface-user 第三方接口3

    ''' 用户接口层 ''' # 导入数据库包下面的处理数据模,为了使用其内部名称空间 from db import db_handler # 注册接口函数,接收名字与密码两个参数 def regist ...

  5. python爬虫挂代理

    以下是GET的方法,使用的代理接口网站是 http://www.xicidaili.com/nn/ #-*- coding:utf-8 -*- from bs4 import BeautifulSou ...

  6. C# 连接池开发,多连接高效应用开发,多连接自动维护管理。

    本文将使用一个Github开源的组件库技术来实现连接池的操作,应用于一些情况下的频繁的网络连接操作. github地址:https://github.com/dathlin/HslCommunicat ...

  7. What is the CocoaUI ?

    http://www.cocoaui.com/en https://github.com/ideawu/cocoaui 传统的 iOS 应用由于苹果自身的技术所限, 无法实现丰富的 UI 换皮肤(主题 ...

  8. Python全栈之路----常用模块----sys模块

    sys.argv  命令行参数 List,第一个元素是程序本身路径 #test.py import sys print(sys.argv) D:\ProgramLearning\Py_program& ...

  9. Leetcode : eImplement strStr

    Leetcode : eImplement strStr 描述 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个 ...

  10. Linux下修改Jenkins默认端口

    我是自动安装的Jenkins,默认目录为 jenkins安装目录:/var/lib/jenkins jenkins日志目录:/var/log/jenkins/jenkins.logjenkins默认配 ...