[atAGC045D]Lamps and Buttons
由于$p_{i}$是随机的,不断选择最小的、未被操作过的$i$并处理其所在的环一定是最优的,而这样与已知$p_{i}$的区别是,当选择了一个$i=p_{i}$,那么必然失败(而已知$p_{i}$时不会去选择)
考虑令$t=\min_{p_{i}=i或i=A+1}i$,我们只能操作到$t-1$为止,因此即要求:
1.$\forall 1\le i<t,i\ne p_{i}$,同时若$t\le A$,则$p_{t}=t$
2.$\forall A<i\le n$,满足$\exists 1\le j<t,i和j在同一个环中$
对于$1\le i<t,i=p_{i}$的$i$数量容斥,即枚举这个数量$j$,之后这$j$个位置以及$t$(若$t\le A$)可以看作删除(这里有$(-1)^{j}{t-1\choose j}$的系数)
通过容斥,我们就去除了第一个条件(注意:容斥仅仅强制了这$j$个位置满足$p_{i}=i$,对其余位置没有限制),再整理一下,可以看作以下问题——
令$x=t-1-j$(初始是亮的且可以操作)、$y=\max(A-t,0)$(初始是亮的但不能操作)和$z=n-A$(初始不亮),统计$x+y+z$阶的排列:$\forall i\in z$,满足$\exists j\in x,i和j在同一个环中$
(上面的$\in x$指属于这$x$个点中的一个,$y$和$z$类似)
将排列看作一张有向图,每一次插入$i$,有两种可能:
新建一条边$(i,i)$或选择一条边$(x,y)$,删除该边并建立$(x,i)$和$(i,y)$($x$可以等于$y$)
归纳可得这样可以得到所有排列(所对应的有向图),同时我们考虑依次插入$x+y+z$个数,对于前$x$个数是任意的,再填$z$个数,但都只能在之前插入而不能选择自环,最后$y$个数依旧任意
(如果先填$y$个数,那么$z$不能选择仅由$y$组成的环,因此不正确)
根据乘法原理将这些乘起来,即$\frac{x(x+y+z)!}{x+z}$,综合前面答案即为$\sum_{t=1}^{A+1}\sum_{j=0}^{t-1}(-1)^{j}{t-1\choose j}\frac{x(x+y+z)!}{x+z}$,预处理阶乘和逆元就可以做到$o(n+A^{2})$

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 10000005
4 #define mod 1000000007
5 int n,a,ans,fac[N],inv[N],inv_fac[N];
6 int c(int n,int m){
7 return 1LL*fac[n]*inv_fac[m]%mod*inv_fac[n-m]%mod;
8 }
9 int calc(int x,int y,int z){
10 return 1LL*fac[x+y+z]*x%mod*inv[x+z]%mod;
11 }
12 int main(){
13 scanf("%d%d",&n,&a);
14 fac[0]=inv[0]=inv[1]=inv_fac[0]=1;
15 for(int i=1;i<N-4;i++)fac[i]=1LL*fac[i-1]*i%mod;
16 for(int i=2;i<N-4;i++)inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod;
17 for(int i=1;i<N-4;i++)inv_fac[i]=1LL*inv_fac[i-1]*inv[i]%mod;
18 for(int i=1;i<=a+1;i++)
19 for(int j=0;j<i;j++){
20 int s=1LL*c(i-1,j)*calc(i-1-j,max(a-i,0),n-a)%mod;
21 if (j&1)s=mod-s;
22 ans=(ans+s)%mod;
23 }
24 printf("%d",ans);
25 }
[atAGC045D]Lamps and Buttons的更多相关文章
- poj 1176 Party Lamps
http://poj.org/problem?id=1176 Party Lamps Time Limit: 1000MS Memory Limit: 10000K Total Submissio ...
- party lamps(dfs优化+规律枚举)
Problem description: To brighten up the gala dinner of the IOI'98 we have a set of N coloured lamps ...
- Android 添加ActionBar Buttons
一.在res/menu文件夹下创建Xml文件 跟标签为menu,设置item <?xml version="1.0" encoding="utf-8"?& ...
- Lesson 6 Percy Buttons
Text I have just moved to a house in Bridge Street. Yesterday a bagger knocked at my door. He asked ...
- BUTTONS V. 2.0.0——CSS按钮库
BUTTONS-V2-CSS库样式职责 CSS库样式职责分离优点 模块样式命名更清晰化 易于维护.扩展性强 动画效果——修改样式后有过度效果,默认样式 源码如下 <!DOCTYPE html&g ...
- CodeForces 520B Two Buttons(用BFS)
Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Codeforces Round B. Buttons
Manao is trying to open a rather challenging lock. The lock has n buttons on it and to open it, you ...
- AngularJs的UI组件ui-Bootstrap分享(七)——Buttons和Dropdown
在ui-Bootstrap中,Buttons控件和Dropdown控件与form表单中的按钮和下拉框名字很像,但实际上这两个控件有新的含义. 先说Buttons,它是一组按钮,用来实现form表单中的 ...
- 使用虚拟按钮(Ghost Buttons)的25个网站
2014年已经过去大半年了,我们看到网页设计领域出现新的设计趋势. 虚拟按钮(Ghost Buttons)是指具备基本的按钮形状的透明按钮,但有细实线的边框.有些虚拟钮是互动的,点击之后按钮可能会成为 ...
随机推荐
- VS运行时 /MD、/MDd 和 /MT、/MTd之间的区别
程序运行时出现问题,选择的是Release,win64位的模式,并且已经看到了宏定义NDEBUG,但是程序依然进入上面的部分 解决方案是将属性->C/C++->代码生成器->运行库里 ...
- 【Docker】(10)---详细说说 Dockerfile文件
一.基础概念 1.基本概念 Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建.有了 Dockerfile,当我们需要定制 ...
- pycharm安装pika提示CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com>
1. 问题描述: pycharm安装第三方库时提示CondaHTTPError: HTTP 000 CONNECTION FAILED. 2. 错误原因:默认镜像源访问速度过慢,会导致超时从而导致更新 ...
- 【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符
UFunction声明 UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数.UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文 ...
- Beta阶段第九次会议
Beta阶段第九次会议 时间:2020.5.25 完成工作 姓名 完成工作 任务难度 完成度 ltx 1.发现小程序身份认证bug和新闻列表获取bug2.修改新增页面风格 轻 90% xyq 1.修改 ...
- [技术博客]大闸蟹的技术博客,通过gitlab api进行用户批量创建
技术博客--通过gitlab api批量注册用户 gitlab登录界面本身提供了register功能,但需要手工一个个添加,对于一次性会添加整个班级的学生的软工平台来说并不科学合理.使用gitlab ...
- qgis cookbook-QgsMapRendererJob学习
学习到渲染(QgsMapRendererJob),按照教程所讲总是输出不了图像,看了一下qgis的测试源码,发现少了一句话,加上后就可以输出了! from qgis.core import * fro ...
- 按照工业标准1英寸=25.4mm,而在电子元件成像领域Sensor尺寸1英寸=16mm。
按照工业标准1英寸=25.4mm,而在电子元件成像领域Sensor尺寸1英寸=16mm. 我们平常所说的CCD/CMOS的尺寸,实际上是指Sensor对角线的长度,这一点跟我们平常所说的屏幕尺寸是一样 ...
- 设计的MOS管三极管简单开关电路驱动能力不够3
16楼说得非常明白,补充一点,R3如果不要,会有下冲产生.4 Q: Z/ G G1 s8 Z- } 能解释下为什么会产生过冲吗?9 i, P* D* X) u. t/ b ^ 让我们这些菜鸟学习学 ...
- Python环境配置详细步骤以及第一个程序
打开python官网:https://www.python.org/ 在官网找与自己电脑系统匹配的版本路径 这里以python3.7.2版本为例: 下载完成后,使用管理员身份进行安装: 打开命令提 ...