Description

详见OJ

Solution

对于\(limit1,2\)就是使序列\(1~n\)的排列。
对于\(limit3\),我们可以将其看做是两个最长上升子序列正好覆盖整个序列,证明显然。
我们可以做一个前缀\(max\)序列。这样对于\(max[i]\),保证\(max[i]>=i\)。
而且保证\(max[n]=n\)。
如此,我们可以将问题转化成图。
那么我们可以将问题变成:
求从\((1,1)\)到\((x,y)\)再到\((n,n)\)的方案数,途中不能触碰到\(y=x-1\)的直线(不能使\(max[i]<i\))。
对于触碰到的方案数用题解说的翻折法即可。
预处理阶乘和逆元\(O(n)\),询问\(O(1)\)。时间可过。

Code

#include <cstdio>
#define maxn 20000000
#define ll long long
#define mo 1000000007
#define mem(x, a) memset(x, a, sizeof x)
#define fo(x, a, b) for (int x = a; x <= b; x++)
#define fd(x, a, b) for (int x = a; x >= b; x--)
using namespace std;
int T, n;
ll x, y, jc[maxn + 10], ny[maxn + 10], ans = 0;inline int read()
{int x = 0; char c = getchar();while (c < '0' || c > '9') c = getchar();while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();return x;
}inline void swap(ll &x, ll &y) {ll t = x; x = y; y = t;}ll ksm(ll x, int y)
{ll s = 1;while (y){if (y & 1) s = s * x % mo;x = x * x % mo; y >>= 1;}return s;
}ll C(ll x, ll y) {return x > y ? 0 : jc[y] * ny[x] % mo * ny[y - x] % mo;}int main()
{freopen("tg.in", "r", stdin);freopen("tg.out", "w", stdout);T = read();ny[0] = jc[0] = jc[1] = 1;fo(i, 2, maxn) jc[i] = jc[i - 1] * i % mo;ny[maxn] = ksm(jc[maxn], mo - 2);fd(i, maxn - 1, 1) ny[i] = ny[i + 1] * (i + 1) % mo;while (T--){n = read(), x = read() - 1, y = read() - 1;if (x > y) swap(x, y);ans = (C(x, x + y) - C(y + 1, x + y) + mo) % mo;x++, y++;ans = ans * ((C(n - x, n + n - x - y) - C(n - y - 1, n + n - x - y) + mo) % mo) % mo;printf("%lld\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/jz929/p/11348921.html

jzoj 6302. 提高组相关推荐

  1. P1066 2^k进制数 NOIP 2006 提高组 第四题

    洛谷蓝题(点击跳转) 提高组 第四题 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的 ...

  2. 过河 2005年NOIP全国联赛提高组(离散化+dp)

    1105 过河 2005年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 在河上有一 ...

  3. [NOIP2006] 提高组 洛谷P1066 2^k进制数

    题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...

  4. 洛谷P1003 铺地毯 noip2011提高组day1T1

    洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...

  5. 洛谷P1083 [NOIP2012提高组Day2T2]借教室

    P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...

  6. [NOIp2017提高组]奶酪(BFS)

    [NOIp2017提高组_Day2T1]奶酪 1 #include<iostream> 2 #include<stdio.h> 3 #include<vector> ...

  7. 1099 字串变换 2002年NOIP全国联赛提高组

    1099 字串变换 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 已知有两个字串 A ...

  8. NOIP2008提高组(前三题) -SilverN

    此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0 ...

  9. 清北NOIP训练营集训笔记——图论(提高组精英班)

    清北NOIP训练营集训笔记--图论(提高组精英班) 本文摘自清北学堂内部图论笔记,作者为潘恺璠,来自柳铁一中曾参加过清北训练营提高组精英班,笔记非常详细,特分享给大家!更多信息学资源关注微信订阅号no ...

最新文章

  1. php 缓存模块,PHP缓存之模块缓存(APC)_PHP教程
  2. 普通平键的主要尺寸有_工字钢尺寸大全
  3. SAP CRM和C4C的订单Number range
  4. 语义分割深度学习方法集锦
  5. 负载测试工具Ripplet
  6. 到底是谁发明了物联网?
  7. 微软TypeScript 3.0重磅发布!扶我起来,我还学得动
  8. caffe将图像数据转换成lmdb文件
  9. 为七牛云存储开发的PHP PEAR 包:Services_Qiniu
  10. 学习记录1——vissim4.3安装和vissim4.3时间修改工具使用
  11. 珠海华润银行网银密码控件
  12. 阿里出品的最新版 Java 开发手册,嵩山版,扫地僧
  13. 十、cut ,sort,wc,unip,tee,tr,split 命令
  14. 云控微信开发SDK使用教程--微信联系人标签新增,修改通知服务端
  15. 台式计算机有线无线网卡设置,台式电脑怎么设置无线网络,详细教您台式电脑怎么设置无线网络...
  16. Microsoft Visual Studio 2005中使用水晶报表详细说明
  17. 电脑中病毒,文件夹变成快捷方式
  18. YTU 3166: 共享单车
  19. 【python爬虫专项(19)】blibli弹幕数据爬取(以全站搜索蔡徐坤的视频为例)
  20. 微众银行区块链李辉忠:多方大数据隐私计算平台为数据隐私加“安全锁”

热门文章

  1. scenebuilder各控件属性介绍_Flutter 全栈式——基础控件
  2. mui的学习图片预览
  3. ID3和C4.5分类决策树算法 - 数据挖掘算法(7)
  4. SpringMVC学习--文件上传
  5. paip.C#.NET多线程访问 toolStripStatusLabel
  6. 收藏网站制作常用经典css.div.布局.设计实例打包下载(下方有其他链接)
  7. winform什么时候会调用closed事件_async/await 给程序带来了什么?
  8. linux的system () 函数详解
  9. matlab的max与min函数
  10. excel连接mysql 数据库