[ccBB]Billboards
参考loj2265中关于杨表的相关知识
先来考虑$m\mid n$的情况:
记$t=\frac{n}{m}$,将序列划分为$[1,m],[m+1,2m],...,[(t-1)m+1,tm]$这$t$段,每一段都至少有$k$个物品且可以同时取到,因此取到最小值时必然都恰为$k$个
构造一个$t$列且每列有$k$个格子的杨表,其中第$i$列记录第$t-i+1$段中的$k$个物品相对于该段左端点的距离,不难发现此时合法即要求其为半标准杨表,也即求$g_{m,\{t,t,...,t\}}$(共$k$个$t$)
根据性质3.3,即有$g_{m,\{t,t,...,t\}}=\prod_{i=1}^{k}\prod_{j=1}^{t}\frac{m+j-i}{(k-i)+(t-j)+1}$
先枚举$i$,并分别考虑后者的分子和分母,不难发现即$\frac{(m-i+t)!(k-i)!}{(m-i)!(k-i+t)!}$
将上下同时约掉一个$t!$,即可预处理阶乘及逆元并$o(m\log P)$计算该式
再来考虑$m\not\mid n$的情况:
令$t=\lfloor\frac{n}{m}\rfloor,p=n\ mod\ m$,对其分类讨论:
1.若$p\le m-k$,即需要保证$t$段中每一段的前$p$个位置不能放物品(否则不难得到最后这$p$个位置也要放物品,答案不足够小),也即将$m$减去$p$并令$n=tm$后的问题
2.若$p>m-k$,即需要保证$t$段中每一段的最后$m-p$个位置必须放物品(否则不难得到最后这$p$个位置要放多于$p-(m-k)$个物品,答案也不足够小)
将最后这$p$个位置补至$m$个,由于补充的位置必须填,因此不影响方案数
换言之,即将$k$减去$m-p$、$m$变为$p$并令$n=(t+1)m$后的问题
最终,时间复杂度即为$o(m \log P)$,可以通过


1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod 1000000007
4 #define ll long long
5 int t,n,m,k,ans;
6 int qpow(int n,int m){
7 int s=n,ans=1;
8 while (m){
9 if (m&1)ans=(ll)ans*s%mod;
10 s=(ll)s*s%mod;
11 m>>=1;
12 }
13 return ans;
14 }
15 int main(){
16 scanf("%d",&t);
17 while (t--){
18 scanf("%d%d%d",&n,&m,&k);
19 if (n%m){
20 int t=n/m,p=n%m;
21 if (p<=m-k)m-=p,n=t*m;
22 else k-=m-p,m=p,n=(t+1)*m;
23 }
24 ans=1;
25 int t=n/m;
26 for(int i=1;i<=k;i++){
27 int s=1;
28 for(int j=t+1;j<=m-i+t;j++)s=(ll)s*j%mod;
29 for(int j=1;j<=k-i;j++)s=(ll)s*j%mod;
30 for(int j=1;j<=m-i;j++)s=(ll)s*qpow(j,mod-2)%mod;
31 for(int j=t+1;j<=k-i+t;j++)s=(ll)s*qpow(j,mod-2)%mod;
32 ans=(ll)ans*s%mod;
33 }
34 printf("%d\n",ans);
35 }
36 }
[ccBB]Billboards的更多相关文章
- utf-8 汉字对照表
之前从redis中取出一些数据,utf8 16进制编码,想转成字符,没有找到现成的转化工具,先用这个表直接查找对照吧. UTF8编码表大全Code code# Code (coded in UTF-8 ...
- Bubble Cup 8 finals E. Spectator Riots (575E)
题意: 一个长宽是100000单位的球场上有很多暴动的观众,每个观众都有一个速度v, 在一秒内,观众会等概率地移动到与原位置的曼哈顿距离<=v的地方(不会移动到界外). 你需要选取三个位置,这三 ...
- JS base64 加密和 后台 base64解密(防止中文乱码)
直接上代码 1,js(2个文件,网上找的) 不要觉的长,直接复制下来就OK //UnicodeAnsi.js文件 //把Unicode转成Ansi和把Ansi转换成Unicode function ...
- 转---B/S结构JavaEE WebApp的全自动安装包制作心得
JavaEE的Web应用程序如今已大行其道,但其安装.配置.部署却一直繁琐无比,客观上阻碍了Web应用程序更大规模的推广和应用.因此,开发方制作一个集JDK.Web中间件.开源数据库的全自动安装程序很 ...
- z-fighting在unity中的解决方式
如果在画面中,发现有画面闪烁的问题.那么大多数情况下是z-fighting引起的, 解决方案: 1, 在每个场景中,找到那个MainCamera,然后在Inspector上,找到MainCamera的 ...
- WindowsForm如何实现类似微软project软件的甘特图?
在管理软件研发过程中,特别是涉及项目管理或者生产计划方面,都需要一款类似微软project的控件对项目下的分解任务进行图形展示(甘特图).下面介绍一下在WindowsForm下如何实现类似微软proj ...
- 一款开源且功能强大的C#甘特图控件.NET Winforms Gantt Chart Control
甘特图在项目管理中非常重要,甘特图的思想比较简单,即以图示的方式通过活动列表和时间刻度形象地表示出任何特定项目的活动顺序与持续时间.它直观地表明任务计划在什么时候进行,及实际进展与计划要求的对比.管理 ...
- 一次更愚蠢的NOIP模拟赛
都可以从COGS上找到 纵横字谜(krizaljka) 时间限制: 1 Sec 内存限制: 32 MB 题目描述 给出两个单词,找到第一个相同的字母,然后第一个单词横数输出,第二个竖着输出形成十字形 ...
- ShadowGun Demo学习(非技术向)
主要针对拿来主义,并对一些使用范围广的shader进行研究.虽然是4,5年前的demo,但还是有学习价值的 1.GodRays MADFINGER/Transparent/GodRays 传统的上帝之 ...
随机推荐
- 深入理解Java虚拟机之JVM内存布局篇
内存布局**** JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...
- NOIP&CSP 考前 Dev-cpp 的选项问题和考试心态
(进入考场后您将获得一个崭新的 \(Dev-cpp\),没有中文,没有编译选项,没有缺省源:我还将获得一个崭新的脑子,没有心态,没有智商,没有调试能力--) 中文 \[Step1 \] \[Step2 ...
- 【Java虚拟机4】Java内存模型(硬件层面的并发优化基础知识--缓存一致性问题)
前言 今天学习了Java内存模型第一课的视频,讲了硬件层面的知识,还是和大学时一样,醍醐灌顶.老师讲得太好了. Java内存模型,感觉以前学得比较抽象.很繁杂,抽象. 这次试着系统一点跟着2个老师学习 ...
- 【c++ Prime 学习笔记】第15章 面向对象程序设计
15.1 OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是:数据抽象.继承.动态绑定 使用数据抽象,可将类的接口与实现分离 使用继承,可定义相似的类 ...
- vue3.x新特性之setup函数,看完就会用了
最近有小伙伴跟我聊起setup函数,因为习惯了vue2.x的写法导致了,setup用起来觉得奇奇怪怪的,在一些api混编的情况下,代码变得更加混乱了,个人觉得在工程化思想比较强的团队中使用setup确 ...
- MySQL:基础语法-4
MySQL:基础语法-4 记录一下 MySQL 基础的一些语法,便于查询,该部分内容主要是参考:bilibili 上 黑马程序员 的课程而做的笔记,由于时间有点久了,课程地址忘记了 上文MySQL:基 ...
- 封装一个简单的ajax请求
记录自己第一次封装ajax,肯定有很多考虑不周到,如有错误请指出,本人必将虚心改正. /** * * @param {Object} obj =>header:请求头:url:请求地址:meth ...
- Scrum Meeting 11
第11次例会报告 日期:2021年06月01日 会议主要内容概述: 汇报了进度,开始爆肝. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wiki,如下记录仅为保证公开性: ...
- C++ string类型小结
目录 构造函数 string.append() string.assign() string.at() string.back() string.begin() string.capasity() s ...
- linux tr
转载:tr命令_Linux tr 命令用法详解:将字符进行替换压缩和删除 (linuxde.net) tr命令 文件过滤分割与合并 tr命令可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字 ...