AGC023C Painting Machines
题意
有一排\(n\)个格子,\(i\)操作会使\(i\)和\(i+1\)都变黑。
一个操作序列的得分为染黑所有格子时所用的步数
问所有排列的得分和。
\(n\le 10^6\)
传送门
思路
有一个很直观的感觉:要枚举步数。然后问题就是如何在\(O(1)\)时间内求出排列数。
考虑\(1\)和\(n-1\)是必须染的,剩下的操作只要相邻两个相差不超过\(2\)就好了。那么可以发现要么是一个挨着一个,要么是一个空一格,转化成求有多少种安排空格的方法。
\(k\)个操作,取掉头尾\(k-2\)个,总共\(k-1\)个间隔,要放入\((n-k)-1\)个空格,所以可行的组合数使\(C(k-1,n-k-1)\)然后再乘上\(k!\)以及剩下的\((n-1-k)!\),但发现有可能会有\(k\)步之前就完成的,只要减去\(k-1\)时的答案就好了
#include <bits/stdc++.h>
const int N=1000005,mu=1000000007;
int inv[N],p[N],n,ans,last;
int ksm(int x,int y){
int ans=1;
for (;y;y>>=1,x=x*1ll*x%mu)
if (y&1) ans=1ll*ans*x%mu;
return ans;
}
int C(int x,int y){
return 1ll*p[x]*inv[y]%mu*inv[x-y]%mu;
}
int main(){
scanf("%d",&n);
p[0]=1;
for (int i=1;i<=n;i++) p[i]=1ll*i*p[i-1]%mu;
inv[n]=ksm(p[n],mu-2);
for (int i=n-1;i>=0;i--) inv[i]=inv[i+1]*1ll*(i+1)%mu;
for (int i=(n+1)/2;i<=n-1;i++){
int x=C(i-1,n-i-1)*1ll*p[i]%mu*p[n-i-1]%mu;
ans=(ans+i*1ll*(x-last+mu)%mu)%mu;
last=x;
}
printf("%d\n",ans);
}
后记
好神仙啊
AGC023C Painting Machines的更多相关文章
- agc023C - Painting Machines(组合数)
题意 题目链接 有\(n\)个位置,每次你需要以\(1 \sim n-1\)的一个排列的顺序去染每一个颜色,第\(i\)个数可以把\(i\)和\(i+1\)位置染成黑色.一个排列的价值为最早把所有位置 ...
- AtCoder - 3954 Painting Machines
题面在这里! 题解见注释 /* 考虑一个可以用 K ((n+1)/2 <= K < n)次染黑的方案, 那么将操作前K次的机器从小到大排序,一定是: a1=1 < a2 < . ...
- AtCoder Grand Contest 023 C - Painting Machines
Description 一个长度为 \(n\) 的序列,初始都为 \(0\),你需要求出一个长度为 \(n-1\) 的排列 \(P\), 按照 \(1\) 到 \(n\) 的顺序,每次把 \(P_i\ ...
- [AtCoder3954]Painting Machines
https://www.zybuluo.com/ysner/note/1230961 题面 有\(n\)个物品和\(n-1\)台机器,第\(i\)台机器会为第\(i\)和\(i+1\)个物品染色.设有 ...
- 【AtCoder】AGC023 A-F题解
可以说是第一场AGC了,做了三道题之后还有30min,杠了一下D题发现杠不出来,三题滚粗了 rating起步1300+,感觉还是很菜... 只有三题水平显然以后还会疯狂--啊(CF的惨痛经历) 改题的 ...
- ARM概论(Advanced RISC Machines)
简介 ARM7是32 位通用微处理器ARM(Advanced RISC Machines)家族中的一员,具有比较低的电源消耗和良好的性价比, 基于(精简指令)RISC结构,指令集和相关的译码机制与微程 ...
- Deep Learning 18:DBM的学习及练习_读论文“Deep Boltzmann Machines”的笔记
前言 论文“Deep Boltzmann Machines”是Geoffrey Hinton和他的大牛学生Ruslan Salakhutdinov在论文“Reducing the Dimensiona ...
- CF448C Painting Fence (分治递归)
Codeforces Round #256 (Div. 2) C C. Painting Fence time limit per test 1 second memory limit per tes ...
- [译]使用Continuous painting mode来分析页面的绘制状态
Chrome Canary(Chrome “金丝雀版本”)目前已经支持Continuous painting mode,用于分析页面性能.这篇文章将会介绍怎么才能页面在绘制过程中找到问题和怎么利用这个 ...
随机推荐
- Java QuickSort 快速排序
Java QuickSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternational ...
- 运维MES的日子里
可以看下<工业软件国内与国外差距,越来越小还是越来越大>.<MES技术国内现状与未来发展趋势>及<国际主要MES厂商>,总结来说中国工业是进步的,工业软件也是进步的 ...
- asp.net core 2.0发布到IIS报错解决方案
大体来说,是环境的问题. 第一个错误,如图: 1. 查了网上说是文件夹权限的问题,依次设置了Everyone权限和IIS_IUSER权限,能勾选的都勾选了,然而并没有什么用,看来不是这个问题导致的. ...
- 数据库入门(mySQL):创建数据库
基于JetBrains DataGrip创建数据库.SQL语句创建数据库 MySQL数据库存储引擎和数据类型 创建数据库表及基本操作 导出数据库.删除数据库.导入数据库 一.基于JetBrains D ...
- Oracle中select 1和select *的区别
转自:https://www.linuxidc.com/Linux/2010-05/26202.htm 创建myt表并插入数据,如下: create table myt(name varchar2,c ...
- 页面中的div居中
div的居中 一.页面的水平居中 #article{ position: relative; margin: 0 auto; width: 80%; background-color: aquamar ...
- How to find Oracle EBS Weblogic Server Admin Port and URL
How to find Oracle EBS Weblogic Server Admin Port and URL Weblogic admin portMethod 1 Open the App ...
- LINUX学习笔记——LINUX下EXP命令全库备份数据库文件
LINUX下EXP命令全库备份数据库文件 1)建立备份目录,目录操作权限授权给Oracle用户 mkdir /backup --创建backup文件夹 cd / --进入cd语句 ls -l ...
- Python 中文文件统计词频 + 中文词云
1. 词频统计: import jieba txt = open("threekingdoms3.txt", "r", encoding='utf-8').re ...
- Computer Vision_18_Image Stitching:A survey on image mosaicing techniques——2013
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...