HDU 5145 - NPY and girls
题意: cases T(1≤T≤10) (0<n,m≤30000) (0<ai≤30000)
n个数ai 表示n个女孩所在教室
m次询问 [L,R](1 <= L <= R <= n)
问访问所有女孩的顺序方案数(进教室顺序)为多少(一次进教室只能访问一个人)
分析:
莫队算法 + 排列数
一个区间内的方案数为 C(m,c1)*C(m-c1,c2)*C(m-c1-c2,c3)*....*C(cn,cn)
每次转移通过下式:
C(m+1,n+1) = C(m,n) * (m+1/n+1)
C(m,n) = C(m+1,n+1) * (n+1/m+1) (对于缩小的过程而言)
因为需要对大素数取模,除法就是乘上对应的乘法逆元,故先用费马小定理
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> using namespace std; const int MOD = 1000000007; const int MAXN = 30005; const int MAXM = 30005; struct Query {int L,R,id; }node[MAXM]; struct Ans {long long a; }ans[MAXM]; int a[MAXN],num[MAXN]; long long inv[MAXN];//乘法逆元 int t,n,m,unit; void work() {long long temp = 1;memset(num,0,sizeof(num));int L = 1 , R = 0;for(int i = 0; i < m ; i++){while(R < node[i].R)//C(m+1,n+1) = C(m,n)*(m+1/n+1) {R++;num[a[R]]++;temp = temp * (R - L + 1) % MOD * inv[num[a[R]]] % MOD;}while(R > node[i].R)//C(m,n) = C(m+1,n+1)*(n+1/m+1) {temp = temp * num[a[R]] % MOD * inv[R - L + 1] % MOD;num[a[R]]--;R--;}while(L < node[i].L)//C(m,n) = C(m+1,n+1)*(n+1/m+1) {temp = temp * num[a[L]] % MOD * inv[R - L + 1] % MOD;num[a[L]]--;L++;}while(L > node[i].L)//C(m+1,n+1) = C(m,n)*(m+1/n+1) {L--;num[a[L]]++;temp = temp * (R - L + 1) % MOD * inv[num[a[L]]] % MOD;}ans[node[i].id].a = temp;} } bool cmp(Query a,Query b) {if(a.L/unit != b.L/unit) return a.L/unit < b.L/unit;else return a.R < b.R; } void Init()//femat {inv[1] = 1;for(int i = 2; i < MAXN; i++) inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD; } int main() {Init();scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i = 1; i <= n; i++) scanf("%d",&a[i]);for(int i = 0; i < m; i++){scanf("%d%d",&node[i].L,&node[i].R);node[i].id = i;}unit = (int)sqrt(n);sort(node,node+m,cmp);work();for(int i = 0; i < m ;i++)printf("%lld\n",ans[i].a);} }
转载于:https://www.cnblogs.com/nicetomeetu/p/5709207.html
HDU 5145 - NPY and girls相关推荐
- hdu 5145 NPY and girls (莫队算法)
题意:有一个长度为n的数字序列,m次询问一个区间l-r中数字重新排列的方案数(mod 10^9+7). 明显的莫队算法,只需要排序,然后预处理一下逆元就可以了. 所谓的莫队算法,最初版本是求曼哈顿距离 ...
- hdu 5144 NPY and shot(三分)
http://acm.hdu.edu.cn/showproblem.php?pid=5144 题意 :给出初速度 v 和高度 h 求最远斜抛距离 思路:根据物理公式推出 距离 s=v*cos(x)* ...
- 阿里云nginx服务器多站点的配置
Fighting! 欲戴皇冠,必承其重! 目录视图 摘要视图 订阅 [活动]Python创意编程活动开始啦!!! CSDN日报20170426 --<四无年轻人如何逆袭> [C ...
- HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)
HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...
- (step6.3.2)hdu 1068(Girls and Boys——二分图的最大独立集)
题目大意:第一行输入一个整数n,表示有n个节点.在接下来的n行中,每行的输入数据的格式是: 1: (2) 4 6 :表示编号为1的人认识2个人,他们分别是4.6: 求,最多能找到多少个人,他们互不认识 ...
- HDU 2574 HDOJ 2574 Hdu Girls' Day ACM 2574 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 因为 大于 1 << 16 的和数都能用 1 -- 1<<16 之间的素数表示, 不能表示的肯 ...
- [manacher] hdu 3294 Girls#39; research
题意: 给一个字符x代表真实的a 然后输出的时候转换 然后就是求最长回文子串的串是什么 长度要大于1 思路: 就是裸的manacher,弄清楚下标的转换关系就好了 代码: #include" ...
- HDU4730--We Love MOE Girls HDU(148)
草,这么简单的题,我们15分钟才出来,这次排名靠后因为水题没切好啊 #include <iostream> #include <cstdio> #include <cst ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
最新文章
- formValidator BUG
- ‘utf-8‘ codec can‘t encode character ‘\udcc0‘ in position 35
- 从“等等”到“秒开”再到“直开”,是什么让闲鱼社区相见恨晚?
- 108. Convert Sorted Array to Binary Search Tree
- Bootstrap系列 -- 26. 下拉菜单标题
- 系统微服务签发token
- 2007浙大复试上机考试题目1--最小长方形
- 深入浅出TensorFlow(二):TensorFlow解决MNIST问题入门
- pythonhelloworld项目,10分钟搭建一个小型网页(python django)(hello world!)
- Flex游戏篇——游戏开发概述
- 【ROM定制】Fastboot Enhance —— 适合人类使用的Fastboot + Payload.bin 解包工具箱
- apa引用要在文中吗_【019】写作格式 | APA 7th style 引用格式
- lena图的直方图以及与其他图像的直方图匹配
- php文件改后缀,php 如何修改文件后缀
- linkedin解封_工程师如何在LinkedIn上找到(以及如何隐藏)
- 【c++】cout.setf(left)、cout.setf(right)详解
- Excel表格如何设置下拉选项并应用到整列
- adapter.notify()、notifyAll()、notifyDataSetChanged ()、notifyDataSetInvalidated ()的区别
- bugku 杂项 图穷匕见 wp
- npm模块之opn使用教程(译)
热门文章
- html5 的有那些新标签,Html5新标签都有那些
- 2017年9月计算机二级c语言,2017年9月计算机二级C语言程序设计练习题
- linux ppp漏洞,Linux下ppp拨号的实现(Arm)
- 分布式光伏补贴_四川:2020年起工商业分布式光伏已无补贴
- linux shell运行脚本命令行参数,shell脚本命令行参数简介
- qt调用mysql调用了存储过_Qt调用Server SQL中的存储过程
- linux的nfs端口号,#Linux NFS服务 固定端口及防火墙配置#
- 大学期末考java编程题_大学java期末考试考试题和答案
- spring注入普通java类_普通java类如何取得注入spring Ioc容器的对象
- oracle ora 00283,【案例】Oracle报错ORA-16433非归档丢失redo无法启动的恢复过程