P7322
好神仙!
\(\color{#5bc9}\text{提醒,本文有大量没有推到过程的式子,所以读者可以自己遮住先推一下}\)
Inscription:
有一个长度为 \(k\) 的窗口,在一个长度为 \(n\) 的序列 \(a\) 上滑动,请问滑动窗口中的数的 \(\min\) 共有多少种值。
Solution:
接下来我们考虑之后什么情况才会让答案 \(+1\)。
既然每次向右移动 \(1\) 的长度,那么只有可能删除的数或者新加入的数是最小值答案才有可能 \(+1\)。
对于最左边的数是窗口滑动之前是窗口最小值,进行一波推式子之后(此处省略一万行),可以发现它对答案的贡献有:
\]
解释一下:
其中从左往右,求和符合是枚举这个最小值的大小,组合数是令窗口中剩余的 \(k−1\) 个数大于最小值的值的个数。
两个阶乘分别是窗口外面的数任意排列和窗口内部除去最小值外任意排列。
最后一个 \(n−k\) 是计算排列中窗口可以在的位置有 \(n−k\) 个。
同理新加入的数的的贡献就为:
\]
但是未免有左右两边都是最小的情况,所以我们要减去。
所以需要减掉的部分为:
\]
\(i−1\) 是最右边小于最左边的个数。
\(\color{violet} \text{注意:最后还需要加上每个排列都缺少的 1 答案,也就是总答案加上 n!}\)。
但是我不甘于 \(O(n-k)\) 的做法(除了预处理),于是就有了下面的事情。
我们来化简 \(s1,s2,s3\)(化简过程略,读者可以自己遮住先推一下)。
\]
\]
\]
然后呢,就有一个规律,那就是 \(s1 - s3 = s2\)。
所以答案从 \(s1 + s2 - s3 + n!\) 变成了 \(2 \times s2 + n!\)。
但是,我们还不满足。
\(s2\) 仍然可以化简(读者可以自己遮住先推一下)。
\]
所以把上面这个式子带入求答案的式子。
所以:
\]
所以完结撒花!!
最后贴上代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
int qpow(int a,int b)
{
int res = 1;
while(b)
{
if(b & 1)
{
res = res * a % mod;
}
b >>= 1;
a = a * a % mod;
}
return res;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n,k;
cin >> n >> k;
int fac = 1;
for(int i = 1;i <= n;i++)
{
fac = fac * i % mod;
}
cout << (2 * (fac * (n + 1) % mod) * qpow(k + 1,mod - 2) % mod - fac + mod) % mod;
return 0;
}
随机推荐
- 见鬼了!我家的 WiFi 只有下雨天才能正常使用...
这是作者大学时期在家里遇到的一个非常奇怪的网络问题,作者的父亲是一名经验丰富的网络工程师,他们家里使用了一个复杂的网络设置,通过 Wi-Fi 桥接的方式,将父亲公司的高速商业网络连接到家中.但是有一天 ...
- 剑指offer03(Java)-数组中重复的数字(简单)
题目: 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任 ...
- 力扣537(java)-复数乘法(中等)
题目: 复数 可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件: 实部 是一个整数,取值范围是 [-100, 100]虚部 也是一个整数,取值范围是 [-100, ...
- 源码解读:KubeVela 是如何将 appfile 转换为 K8s 特定资源对象的
简介: KubeVela 是一个简单易用又高度可扩展的云原生应用管理引擎,是基于 Kubernetes 及阿里云与微软云共同发布的云原生应用开发模型 OAM 构建.本文主要目的是探索 KubeVela ...
- Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩
简介: 弹性伸缩作为 Kubernetes 的核心能力之一,但它一直是围绕这无状态的应用负载展开.而 Fluid 提供了分布式缓存的弹性伸缩能力,可以灵活扩充和收缩数据缓存. 它基于 Runtime ...
- UNO 的 SamplesApp.Skia.Gtk 丢失字体文件抛出空异常
在运行 UNO 的 SamplesApp.Skia.Gtk 例子程序时,如果没有拷贝字体文件夹,导致字体丢失,将会在运行的时候抛出 NullReferenceException 空异常 抛出的异常堆栈 ...
- WPF 已知问题 Separator 无法应用 ContextMenu 定义的默认样式
本文记录一个 WPF 已知问题,在 ContextMenu 的 Resources 里定义 Separator 的默认样式,在 ContextMenu 里面的 Separator 将应用不上,或者说不 ...
- C++里也有菱形运算符?
最近在翻<c++函数式编程>的时候看到有一小节在说c++14新增了"菱形运算符".我寻思c++里好像没什么运算符叫这名字啊,而且c++14新增的功能很少,我也不记得有添 ...
- JavaWeb 中 “转发”与 “重定向”的区别
JavaWeb 中 "转发"与 "重定向"的区别 每博一文案 人生的常态,就是有聚有散,有得有失,就像山峰一样,总有高低,起伏不断. 曾经,我们是鲜衣怒马的少年 ...
- 大营销抽奖系统,DDD开发要如何建模?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥. 经过5.1假期的一顿框框输出,终于完成了<大营销项目 ...