[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 传统的上帝之 ...
随机推荐
- 数据库MySQL主从-GTID
1.第一步在主服务器上/etc/my.cnf/下添加 log-bin=log-bin server-id=1 gtid_mode=ON enforce_gtid_consistency 2.第二步:重 ...
- Xcode相关
Xcode相关的路径 Provisioning Profiles存放路径:~/Library/MobileDevice/Provisioning Profiles 所有模拟器(包括历史模拟器):~/L ...
- java课堂测试3第一部分(未完善)
package test3;import java.util.*; public class Grade2 { static String[][] mis=new String[500][4]; // ...
- zabbix和prometheus的优缺点对比
使用Prometheus(https://github.com/prometheus)原生的k8s服务发现驱动,采集容器化信息:通过微服务参数配置,暴露运行状态信息提供给prometheus,实现微服 ...
- L1-027 出租 (20 分) java题解
下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破.其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对 ...
- (课内)信安数基RSA-level1&&2
注:(不求甚解的)攻击原理 以及(浅层的)算法解释已在图片中给出:文字部分主要讲一些python语法的东西. 代码需要库 gmpy2和libnum:加密算法还需要Crypto.Util.number ...
- 封装ARX给.Net调用
1:创建工程名.def的文件,内容如下: 2:def文件位置: 3:属性页配置: 4:acrxEntryPoint.cpp下面添加如下代码(可以传参数) 5:c#调用 怕自己忘记,记录一下.
- Beta阶段第三次会议
Beta阶段第三次会议 完成工作 姓名 工作 难度 完成度 ltx 1.掌握小程序代码和相关知识2.构思小程序游客模式 轻 90% xyq 1.修改场地表格信息2.对原页面活动申请场地部分进行修改 轻 ...
- kafka-eagle监控界面搭建
kafka-eagle监控界面搭建 一.背景 二 .mac上安装kafka-eagle 1.安装JDK 2.安装eagle 1.下载eagle 2.解压并配置环境变量 3.启用kafka的JMX 4. ...
- Spring Security Jwt Token 自动刷新
token的自动刷新 一.功能需求 二.功能分析 1.token 的生成 2.token 的自动延长 3.系统资源的保护 4.用户如何传递 token 三.实现思路 1.生成 token 和 refr ...