Codeforces889C. Maximum Element
$n \leq 2000000$的排列,问有多少满足:存在个$i$,使得$p_i \neq n$,且$p_j<p_i,j \in [i+1,i+K]$,$K \leq 2000000$是给定常数。膜$1e9+7$。
排列题还是比较菜。。
这次的切入点依然是排列题的经典套路--考虑将$n$加入$n-1$的合法排列,从而建立递推关系。
先从答案要求入手,假如把$n$插进位置$i$,那么$i$之前的序列必须已经合法,否则要么接下来一个数是$n$,后面$K$个数一定$<n$,不合法,要么这序列根本就不合法,就gg。也就是说,$n$之前的数字的大小关系已经确定了。确定大小关系的情况可以开始递推:$D(i)$表示$i$在位置$i$时,剩下$i-1$个数乱排时的合法排列数——$n$(注意,这里真的是$n$)在位置$i$时,前$i-1$个数一旦确定,他们的大小关系必须如同$D(i)$的方案,然后其他的数乱排列。因此最终答案为$\sum_{i=1}^{n}D(i)\frac{(n-1)!}{(i-1)!}$。搞定。
注意这里通过大小关系把$n$变成更小的东西。
现在试着求$D(i)$。首先$i<=K$时$D(i)=0$这实际上排除了一重条件$p_i \neq n$,因为此时造成$p_j<p_i,j \in [i+1,i+K]$的只有非$n$的数。好那就来看看剩下最大的$n-1$。当$n-1$放在前$i-K-1$个位置时,它就是符合条件的$i$。当它放在$i-K$往后的位置时,又来!此时$n-1$后边是不可能有非法$i$了,但前面一定有,大小关系又是$D$!于是有$D(n)=(n-K-1)(n-2)!+\sum_{i=n-K}^{n-1}D(i)*\frac{(n-2)!}{(i-1)!}$,把$(n-2)!$提到前面,记个前缀和即可。
//#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
//#include<queue>
//#include<time.h>
//#include<complex>
#include<algorithm>
#include<stdlib.h>
using namespace std; int n,K;
#define maxn 2000011
const int mod=1e9+;
int fac[maxn],inv[maxn]; int powmod(int a,int b)
{
int ans=;
while (b)
{
if (b&) ans=1ll*a*ans%mod;
a=1ll*a*a%mod; b>>=;
}
return ans;
} int sum[maxn],f[maxn];
int main()
{
scanf("%d%d",&n,&K);
fac[]=; for (int i=;i<=n;i++) fac[i]=fac[i-]*1ll*i%mod;
inv[n]=powmod(fac[n],mod-); for (int i=n;i>=;i--) inv[i-]=1ll*inv[i]*i%mod;
for (int i=;i<=K;i++) f[i]=sum[i]=;
for (int i=K+;i<=n;i++)
{
f[i]=(1ll*(i-K-)*fac[i-]%mod+1ll*fac[i-]*(sum[i-]+mod-sum[i-K-])%mod)%mod;
sum[i]=(sum[i-]+1ll*f[i]*inv[i-])%mod;
}
int ans=;
for (int i=;i<=n;i++) ans=(ans+1ll*(sum[i]-sum[i-]+mod)*fac[n-])%mod;
printf("%d\n",ans);
return ;
}
Codeforces889C. Maximum Element的更多相关文章
- 【CF886E】Maximum Element DP
[CF886E]Maximum Element 题意:小P有一个1-n的序列,他想找到整个序列中最大值的出现位置,但是他觉得O(n)扫一遍太慢了,所以它采用了如下方法: 1.逐个遍历每个元素,如果这个 ...
- 【CodeForces】889 C. Maximum Element 排列组合+动态规划
[题目]C. Maximum Element [题意]给定n和k,定义一个排列是好的当且仅当存在一个位置i,满足对于所有的j=[1,i-1]&&[i+1,i+k]有a[i]>a[ ...
- Codeforces 889C Maximum Element(DP + 计数)
题目链接 Maximum Element 题意 现在有这一段求序列中最大值的程度片段: (假定序列是一个1-n的排列) int fast_max(int n, int a[]) { int ans ...
- Codeforces 886E Maximum Element 组合数学 + dp
我们定义dp[ i ]表示长度为 i 的序列, 最后没有一个==k的时候返回的方案数, 也就是最后强制返回 i 的方案数. 我们能得到dp方程 dp[ i ] = sum(dp[ i - j - ...
- CF886E Maximum Element
$ \color{#0066ff}{ 题目描述 }$ 从前有一个叫Petya的神仙,嫌自己的序列求max太慢了,于是将序列求max的代码改成了下面这个样子: int fast_max(int n,in ...
- Codeforces - 102222A - Maximum Element In A Stack - 模拟
https://codeforc.es/gym/102222/problem/F 注意到其实用unsigned long long不会溢出. #include<bits/stdc++.h> ...
- The 2018 ACM-ICPC Chinese Collegiate Programming Contest Maximum Element In A Stack
//利用二维数组模拟 #include <iostream> #include <cstdio> #include <cstring> #include <s ...
- Codeforces Round #445 Div. 1 C Maximum Element (dp + 组合数学)
题目链接: http://codeforces.com/contest/889/problem/C 题意: 给你 \(n\)和 \(k\). 让你找一种全排列长度为\(n\)的 \(p\),满足存在下 ...
- 【CF886E】Maximum Element
题目 考虑正难则反,答案即为\(n!-\text{返回值为n的排列数}\) 一个排列的返回值为\(n\),当且仅当在\(n\)出现之前没有一个数后面有连续\(k\)个小于它的数 设\(f_i\)表示\ ...
随机推荐
- 【转】Java泛型方法
1. 定义泛型方法 (1) 如果你定义了一个泛型(类.接口),那么Java规定,你不能在所有的静态方法.静态初块等所有静态内容中使用泛型的类型参数.例如: public class A<T> ...
- python中的seteuid
seteuid(...) seteuid(uid) Set the current process's effective user id.
- Linux下搭建DHCP服务器
一.DHCP所需软件包 dhcp-common-4.1.1-34.Pl.el6.centos.x86_64 dhcp-4.1.1-34.pl.el6.centon.x86_64 二.编辑主配置文件 v ...
- 介绍三款大前端UI框架
一.蚂蚁金服团队推出的基于React antd (全名:ant.design) 友情跳链:https://ant.design/index-cn:使用antd模板:https://pro.ant.de ...
- Android(java)学习笔记185:多媒体之设置全屏的方法
在实际的应用程序开发中,我们有时需要把 Activity 设置成全屏显示,一般情况下,可以通过两种方式来设置全屏显示效果.其一,通过在代码中可以设置,其二,通过manifest配置文件来设置全屏. 其 ...
- 因JQUERY版本而产生的问题,需要加上迁移文件
IMG_01_history控制台报错 IMG_02_history代码报错
- C++ isalpha、isalnum、islower、isupper用法
1. isalpha isalpha()用来判断一个字符是否为字母,如果是字符则返回非零,否则返回零. cout<<isalpha('a'); //返回非零 cout<<isa ...
- 《少年先疯队》第九次团队作业:Beta冲刺第三天
3.1 今日完成任务情况 姚玉婷:酒店系统中剩余功能的完善 马丽莎:酒店系统中管理员功能的测试 张 琼:酒店系统中会员功能的测试 孙苗坤:酒店系统中其余管理功能的测试文档的编写 3.2 成员贡献时 ...
- 在CNN网络中roi从原图映射到feature map中的计算方法
在使用fast rcnn以及faster rcnn做检测任务的时候,涉及到从图像的roi区域到feature map中roi的映射,然后再进行roi_pooling之类的操作.比如图像的大小是(600 ...
- 《3+1团队》【Alpha】Scrum meeting 4
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 3+1团队 团队博客地址 https://home.cnblogs.com/u/3-1group ...