首页 > 其他分享 >ARC149E 做题记录

ARC149E 做题记录

时间:2024-09-09 21:13:50浏览次数:1  
标签:记录 ++ ll ARC149E ans mod define lld

link

题目看起来很吓人,似乎无从下手。可以看成一个优先队列,每次加入一个数,弹出最小值。

注意到 \(K\) 范围为 \(10^9\),尝试从化简 \(K\) 范围入手

发现当 \(K > N - M + 1\) 时,数字 \(N - M + 2 \dots N\) 始终处于优先队列中,并在最后有序排成一段。

当操作完 \(N - M + 1\) 次后,接下来 \(K - (N - M + 1)\) 次操作中,每次相当于从后面取一个数放到这 \(M - 1\) 个数的前面。

所以,对于 \(K > N - M + 1\) 的情况,我们可以转化为 \(K = N - M + 1\) 的情况。这样化简还有一个好处,就是可以断环为链。

这样,问题的模型就很简洁了,去掉了许多繁琐的条件

对于第 \(i\) 次操作,发现 \(b_i\) 取值为 \(\min(a_{1\dots i + K - 2} \text{ 中的第 } i \text{ 小值 }, a_i)\)。

这样,当 \(b_i\) 为前缀最大值,有 \(K\) 个空位供选择,否则只能是 \(a_i\)。

最后再乘上 \(N - M + 2 \dots N\) 这些数的排列方案数 \((M - 1) !\),时间复杂度 \(O(N)\)。

点击查看代码
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define mkp make_pair
#define pir pair <ll, ll>
#define pb push_back
using namespace std;
const ll maxn = 3e5 + 10, mod = 998244353;
ll n, m, k, a[maxn], b[maxn], ans = 1;
int main() {
	scanf("%lld%lld%lld", &n, &m, &k);
	for(ll i = 0; i < n; i++) scanf("%lld", a + i);
	if(k > n - m + 1) {
		ll t = k - (n - m + 1); memcpy(b, a, sizeof a);
		for(ll i = 1; i < m; i++)
			a[i + n - m] = b[(i + t + n - m) % n];
		for(ll i = 0; i <= n - m; i++)
			a[i] = b[(i + (t + n - m - i) 
			/ (n - m + 1) * (n - m + 1)) % n];
		k = n - m + 1;
	}
	for(ll i = n; i; i--) a[i] = a[i - 1];
	ll ok = 1;
	for(ll i = 1; i < m; i++)
		ok &= (a[k + i] > a[k + i - 1]);
	for(ll i = 1; i <= k; i++)
		ok &= (a[i] < a[k + 1]);
	if(!ok) { puts("0"); return 0; }
	for(ll i = 1, mx = 0; i <= k; i++)
		if(a[i] > mx) ans = ans * m %mod, mx = a[i];
	for(ll i = 1; i < m; i++) ans = ans * i %mod;
	printf("%lld", ans);
	return 0;
}

标签:记录,++,ll,ARC149E,ans,mod,define,lld
From: https://www.cnblogs.com/Sktn0089/p/18405343

相关文章

  • 微信聊天记录导出教程
    微信作为现代人日常沟通的重要工具,承载了大量的信息和回忆。有时,我们可能需要将微信聊天记录导出,以便于保存、备份或分享。下面,就为大家详细介绍一种导出微信聊天记录的方法。通过下图软件,可以很方便的导出微信聊天记录。使用说明:1、将压缩文件解压到固定位置,不要随意移动......
  • Visual Studio 2019 安装 DevExpress21.2 问题记录
    如题,VisualStudio2019Enterprise安装 DevExpress21.2。安装完DevExpress21.2后,使用 DevExpress_Universal_Patch_v2.4.8工具激活,手动选择了VisualStudio的路径,但是还是提示找不到路径。因此这种方式行不通... 于是乎,在网上找到了解决方案。找到 DevExpres......
  • AEE 执法记录仪助力文旅安全管理,建设文明和谐景区
    近年来,随着人们生活水平的提高和旅游需求的增长,旅游业迅速崛起,成为了全球最火爆的产业之一。作为著名的旅游景区武陵源旅游更是火爆出圈,为了更好的延续好文旅产业发展的良好态势,该地区文化旅游广电体育局推出一系列创新举措。其中为了巩固旅游市场整治成果,遏制旅游乱象反弹,该文旅局......
  • 记录一下,AIGC图生图的原理
    AIGC图生图的原理主要基于深度学习和生成式模型,特别是生成对抗网络(GAN)和扩散模型(DiffusionModel)等先进技术。这些模型通过学习大量图像数据中的规律和模式,能够生成具有高度真实感和多样性的图像。以下是对AIGC图生图原理的详细解析:提示:以下是本篇文章正文内容,下面内容......
  • 《简约至上 交互设计四策略》记录
    最近阅读了《简约至上交互设计四策略第2版》,特在此做记录。简单并不意味着欠缺或低劣,而是说装饰应该紧密贴近设计本身,任何无关的要素都应该予以剔除。也就是说,抛开极简主义,也能成就简单。每当纠结于某个设计时,想一想:“用户在这里真正想干的是什么?”答案就是简单设计的......
  • MySQL索引学习记录(创建、删除、优缺点、底层结构、生失效原则等等)
    1.认识索引1.什么是索引MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。将数据......
  • Java中的异步日志记录:Logback与AsyncAppender的配置与优化
    Java中的异步日志记录:Logback与AsyncAppender的配置与优化大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java应用中,日志记录是关键的功能,但同步日志记录可能会影响性能。为了解决这个问题,异步日志记录可以显著提高应用的响应速度。本文将详细介绍......
  • AI苏格拉底提问学习记录
       ......
  • 基于Web的会议记录与分享系统设计与实现---附源码83155
    目  录摘要第1章绪论1.1研究背景与意义1.2开发现状第2章相关技术介绍2.1JAVA技术2.2springboot框架2.3MySQL数据库第3章系统分析3.1可行性分析3.2功能需求分析3.2.1注册用户功能3.3非功能需求分析3.4安全性需求分析3.4.1系统的......
  • 2024/9/8第六次记录:第六章数组
    第六章数组要存储大量的数据,就必须定义存储空间很大的变量,可以用数组和结构体。这里我们将数组。6.1数组与存储分配6.1.1定义数组数组是用来存放各个数据元素的一组相互间有关联的变量,这一组变量有共同的名称,用名称及在数组内的序号标识各个变量。定义数组的基本格......