题目链接

https://www.lydsy.com/JudgeOnline/problem.php?id=4584

题解

首先将BiB_iBi​加111,把派出的数量变成左闭右开的区间,将AiA_iAi​和BiB_iBi​离散化,把题目涉及的区间变成一段段左闭右开的区间。例如,假设给出了[1,4],[2,5],[3,6][1,4],[2,5],[3,6][1,4],[2,5],[3,6]这三个数量的区间,那么离散化之后就变成了
[1,4]→[1,2),[2,3),[3,5)[2,5]→[2,3),[3,5),[5,6)[3,6]→[3,5),[5,6),[6,7) [1,4] \rightarrow [1,2),[2,3),[3,5)\\ [2,5] \rightarrow [2,3),[3,5),[5,6)\\ [3,6] \rightarrow [3,5),[5,6),[6,7) [1,4]→[1,2),[2,3),[3,5)[2,5]→[2,3),[3,5),[5,6)[3,6]→[3,5),[5,6),[6,7)
可以证明,离散化之后的区间个数不超过2n−12n-12n−1。

设f[i][j][k]f[i][j][k]f[i][j][k]表示前iii个位置,第iii个位置必须派出,派出的数量在离散化后的第jjj个区间内,派出数量在这个区间内的一共有kkk个位置的方案数。
f[i][j][1]=∑i′=0i−1∑j′=0j−1∑k=1nf[i′][j′][k]f[i][j][k]=∑i′=0i−1f[i′][j][k−1](k>1) f[i][j][1]=\sum_{i'=0}^{i-1} \sum_{j'=0}^{j-1} \sum_{k=1}^n f[i'][j'][k]\\ f[i][j][k]=\sum_{i'=0}^{i-1} f[i'][j][k-1](k>1) f[i][j][1]=i′=0∑i−1​j′=0∑j−1​k=1∑n​f[i′][j′][k]f[i][j][k]=i′=0∑i−1​f[i′][j][k−1](k>1)
这个还算比较好理解的,后面两个东西用前缀和转移即可,然后你就会发现fff数组没有存在的必要了,可以去掉(卡常,不加这个过不了),最后fff数组的前缀和-1就是答案。

代码

#include <cstdio>
#include <algorithm>int read()
{int x=0,f=1;char ch=getchar();while((ch<'0')||(ch>'9')){if(ch=='-'){f=-f;}ch=getchar();}while((ch>='0')&&(ch<='9')){x=x*10+ch-'0';ch=getchar();}return x*f;
}const int maxn=500;
const int mod=1000000007;int n,l[maxn+10],r[maxn+10],d[maxn*2+10],tot,len[maxn*2+10],sum[maxn+10][maxn*2+10],inv[maxn+10],sf[maxn*2+10][maxn+10];int main()
{n=read();for(int i=1; i<=n; ++i){l[i]=read();r[i]=read();d[++tot]=l[i];d[++tot]=r[i]+1;}std::sort(d+1,d+tot+1);tot=std::unique(d+1,d+tot+1)-d-1;for(int i=1; i<=n; ++i){l[i]=std::lower_bound(d+1,d+tot+1,l[i])-d;r[i]=std::lower_bound(d+1,d+tot+1,r[i]+1)-d;}for(int i=1; i<tot; ++i){len[i]=d[i+1]-d[i];}inv[1]=1;for(int i=2; i<=n; ++i){inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;}for(int i=0; i<=tot; ++i){sum[0][i]=1;}for(int i=1; i<=n; ++i){for(int j=0; j<l[i]; ++j){sum[i][j]=sum[i-1][j];}for(int j=l[i]; j<r[i]; ++j){int fuck=1ll*len[j]*sum[i-1][j-1]%mod,pps=fuck;for(int k=i; k>1; --k){int h=1ll*sf[j][k-1]*(len[j]-k+1)%mod*inv[k]%mod;pps+=h;if(pps>=mod){pps-=mod;}sf[j][k]+=h;if(sf[j][k]>=mod){sf[j][k]-=mod;}}sf[j][1]+=fuck;if(sf[j][1]>=mod){sf[j][1]-=mod;}sum[i][j]=(1ll*sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+pps)%mod;if(sum[i][j]<0){sum[i][j]+=mod;}}for(int j=r[i]; j<=tot; ++j){sum[i][j]=(1ll*sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1])%mod;if(sum[i][j]<0){sum[i][j]+=mod;}}}printf("%d\n",(sum[n][tot]+mod-1)%mod);return 0;
}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376106.html

BZOJ 4584 [Apio2016]赛艇相关推荐

  1. [Luogu P3642] [BZOJ 4585] [APIO2016]烟火表演

    洛谷传送门 BZOJ传送门 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连.导火索的连接方式形成一 ...

  2. CQNKP4044[APIO2016]赛艇

    题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 NN 个划艇学校,编号依次为 11 到 NN.每个学校都拥有若干艘划艇.同一所学校的所有划艇颜色相同,不同的学校的划艇颜色互 ...

  3. APIO2016赛艇

    首先每个学校的边界范围是\(1e9\),肯定不能直接\(dp[i][j]\)表示前i所学校,第\(i\)所学校派出\(j\)艘船,但\(b<=500\)所有考虑把\(a,b\)离散,第二维改为当 ...

  4. LibreOJ 题解汇总

    目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #10 ...

  5. 一句话题解(20180210~)

    2.9 BZOJ 2006 [NOI2010]超级钢琴.这道题目几天之前就做了.做法是固定右端点,左端点在ST表上走,走法其实就是笛卡尔树的走法.完结撒花! BZOJ 1218 [HNOI2003]激 ...

  6. mysql sql语句联系_sql语句练习50题(Mysql版)

    表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id ...

  7. 2017FJ省队集训 游记

    2017FJ省队集训 游记 又是一篇流水账 Day 1 今天是省队集训的第一天.早上骑车去八中,到的时候汗流太多浑身湿透被杨哥哥和runzhe2000 d了,一个说我去游泳了一个说我打球了...流完汗 ...

  8. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  9. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

最新文章

  1. 任务二:1、选择器 2、连接集中状态的顺序 3、浮动的用发和原理 4、盒模型在IE和Google等不同浏览器的区别与联系...
  2. 生物学重复吗?还有技术重复?
  3. 2018-2019-2 20175223 实验三《敏捷开发与XP实践》实验报告
  4. Spyder打开报错解决办法
  5. 嵌入式开发环境搭建:开发板tftp下载环境搭建
  6. 常用的php.ini 配置选项
  7. WPF版的权限管理系统
  8. 论一只爬虫的自我修养11:Scrapy框架之初窥门径
  9. 删除下拉框只找23火星软件_下拉怎么做首选23火星软件
  10. 小程序--下拉刷新/上拉触底
  11. 软件接口与性能测试,接口测试与性能测试有什么区别?
  12. wampServer虚拟主机配置
  13. Intellij IDEA如何恢复删除的文件或文件夹
  14. android wear表盘商店,手里的 Android Wear 太没个性?你该试试这 4 款表盘
  15. 智能家居生活之视频监控
  16. java雪崩_了解java架构之微服务架构—雪崩效应
  17. uni-app学习笔记之判断当前用户是否拥有某角色和权限
  18. 用c语言switch计算奖金,求助。。关于用switch编写简易计算器
  19. 技术解读|RRBS测序中因酶切人为引入碱基问题
  20. 山狮系统_苹果操作系统OSX10.8山狮/美洲狮Mountain Lion怎么安装

热门文章

  1. Test on 11/14/2016
  2. 给GridView删除列添加删除提示
  3. TopCoder-SRM632-DIV1-300pt-PotentialArithmeticSequence-归纳推理+枚举
  4. wi7家庭版安装 sqlserver2008
  5. Web开发者必备的12款超赞jQuery插件
  6. 「每日分享」CPU Cache 与缓存行
  7. 第 14 章 Networking
  8. 配置Exchange 2010 服务器(二)Exchange2010证书配置
  9. qt系统托盘显示、无主窗体
  10. CodeForces 597A Divisibility