11.1 daimayuan 模拟赛总结

news2024/12/23 11:03:56

逆天

复盘

7:40 开题

扫了一眼四个题,T1 神秘构造,感觉和以前做过的某道题有点像啊,应该能做;T2 题意很简洁,感觉可做;T3,一眼感觉是什么优化 dp;T4,看上去像是拆期望推式子的题,可做!

看起来今天的题印象不错

推 T1,猜了一大堆结论发现都假了,40min 过去,心态有点崩

T2,简单分讨一下发现情况都是可做的,而且需要求的东西 kmp + manacher 似乎都能处理,我真会了?然而心想不会复刻曾经 T1 不会,T2 写 2h 最后假了保龄的悲剧吧

反复确认了一下,觉得没什么问题,开写

写完一遍过大样例?然后发现大样例是真的水,只 manacher 就能过掉 2,3,4,剩下的小数据瞎一贪都过了

决定对拍,还真拍出来错了

然后发现做法有漏洞,没考虑再选一个回文串的情况,不过感觉这个似乎只需要求 以每个位置为左/右端点的最长回文串就行了,思考了一下可以在 manacher 的过程中做到线性

写到最后几步求答案的地方了,然后猛然意识到只考虑最长是不对的,有可能选个比较短的会更优!然后直接人麻了,感觉做法假完了

完了,真复刻了

开始打补丁,觉得这个东西可以 字符串 hash + 二分,那样就单 log 了,可是觉得要是直接字符串 hash 那我推这么多东西还有啥用啊?心态再崩

决定先跳,重新回来想 T1,失败

打完 T3 暴力后剩 30min 决定 T2 瞎搞搞,但也不报希望了,写了个明显假的东西交了

发现能过附加的小样例,但觉得也没什么用。因为觉得算法铁假了,也没再拍

就结束了,感觉真保龄了

结果是:

20 + 100 + 10 + 0 = 130 ???

最逆天的一场

T2 过了我是完全没想到,这做法看上去是随便 hack 的,赛后一直以为是这样。直到准备订题,尝试手造卡掉这个做法,发现造不出来?然后去对拍,硬是拍了 60w 组拍不出来,我去,我真了?

要是知道 T2 能过,后半场的心态肯定就完全不一样了

T1 想偏了啊,潜意识或者说第一印象认为这个构造肯定是猜个结论直接输出那种,完全没往建图后 toposort 的方向想,赛后会看感觉这也很自然啊!可是赛时是第一想法错了,先猜肯定是从小到大填数,然后完全陷进去了

感觉这场问题很大啊,心态怎么这么差,模拟赛 T1 不会直接就变成 sb 了,T3、T4 能写的暴力都不想写了,T2 的处理也不够冷静,其实我的做法跟正解差不了多少了

这可不行啊

题解

T1

在这里插入图片描述
这道题是真应该深刻反思了

我们知道,LIS LDS 本质都可以看作 DAG 上的最长链,所以往建图的角度思考是十分自然的

一个传统的想法:

考虑 LIS 的 dp 过程: f i = max ⁡ ( f j + 1 ) , j < i , a j < a i f_i=\max(f_j+1),j<i,a_j<a_i fi=max(fj+1),j<i,aj<ai

找限制,对于一种数字 x x x

  • 所有等于 x x x 的位置填的数必定单调下降
  • 一个 x x x 需要从前面至少一个 x − 1 x-1 x1 的位置转移
  • x x x 不能从前面任何一个 ≥ x \geq x x 的位置转移

1 , 3 1,3 1,3 限制是很好建图的,关键在于 2 2 2 限制

结合 1 1 1,简单分析就能得出一个结论:只需从前面第一个 x − 1 x-1 x1 转移即可!

然后我们就得到一个 n 2 n^2 n2 建边的思路

考虑优化,显然可以线段树优化建图,但很唐

Sorato 佬的做法是:对于一个 x x x,向前面 最小的 ≥ x \geq x x 的位置 p p p 连边

乍一看不对, [ p + 1 , x − 1 ] [p+1,x-1] [p+1,x1] 这段区间中有 > x >x >x 的数怎么办?

分讨一下:这样的数最终一定也需要 p p p 进行转移!连边后是能够传递过去的!

太牛了,只需建 O ( n ) O(n) O(n) 条边

对于正解:

考虑另一种 LIS,LDS 的求法,维护一个数组 f i f_i fi 表示长度为 i i i 的 lis 的结尾元素的最小值,易知 f i f_i fi 单调不降

l i l_i li 表示以 i i i 结尾的 LIS 的最长长度

扫到第 i i i 个位置上时,设值为 a i a_i ai,在 f i f_i fi 中二分找到位置 k k k 使得 f k ≤ a i < f k + 1 f_k\leq a_i<f_{k+1} fkai<fk+1 ,然后 l i l_i li 就等于 k + 1 k+1 k+1,再更新 f k + 1 = a i f_{k+1}=a_i fk+1=ai

正确性是十分显然的

对于本题,我们发现这种做法中的大小关系是十分明显的,直接模拟这个过程就能做到 O ( n ) O(n) O(n)

#include<bits/stdc++.h>
using namespace std ;

typedef long long LL ;
const int N = 2e5+10 ;
// LIS 的技巧: 维护 fi 表示长度为 i 的lis结尾元素的最小值 
// 易知 fi 是不降的
// 更新时只需要每次二分找到合法的位置替换

int n , a[N] , b[N] ;
int f[N] ; 
vector<int> E[N] ;
int du[N] ;
inline void add( int x , int y )
{
	E[x].push_back(y) ; du[y] ++ ;
}
int q[N] , hh , tt , ans[N] ;
 
int main()
{
	scanf("%d" , &n ) ;
	for(int i = 1 ; i <= n ; i ++ ) scanf("%d" , &a[i] ) ;
	for(int i = 1 ; i <= n ; i ++ ) scanf("%d" , &b[i] ) ;
	for(int i = 1 ; i <= n ; i ++ ) {
		if( f[a[i]] ) add(i,f[a[i]]) ;
		if( a[i]>1 && f[a[i]-1] ) add(f[a[i]-1],i) ;
		f[a[i]] = i ;
	}
	memset( f , 0 , sizeof f ) ;
	for(int i = n ; i >= 1 ; i -- ) {
		if( f[b[i]] ) add(i,f[b[i]]) ;
		if( b[i]>1 && f[b[i]-1] ) add(f[b[i]-1],i) ;
		f[b[i]] = i ;
	}
	// 十分充要 
	hh = 1 ; tt = 0 ;
	for(int i = 1 ; i <= n ; i ++ ) {
		if( !du[i] ) q[++tt] = i ;
	}
	int now = 0 ;
	while( hh <= tt ) {
		int x = q[hh] ; hh ++ ;
		ans[x] = ++now ;
		for(int t : E[x] ) {
			if( --du[t] == 0 ) q[++tt] = t ;
		}
	}
	for(int i = 1 ; i <= n ; i ++ ) {
		printf("%d " , ans[i] ) ;
	}
	return 0 ;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年,Rust开发语言,现在怎么样了?

Rust开发语言有着一些其他语言明显的优势&#xff0c;但也充满着争议&#xff0c;难上手、学习陡峭等。 Rust 是由 Mozilla 主导开发的通用、编译型编程语言&#xff0c;2010年首次公开。 在 Stack Overflow 的年度开发者调查报告中&#xff0c;Rust 连续多年被评为“最受喜爱…

Golang | Leetcode Golang题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; type Solution struct {pre []int }func Constructor(w []int) Solution {for i : 1; i < len(w); i {w[i] w[i-1]}return Solution{w} }func (s *Solution) PickIndex() int {x : rand.Intn(s.pre[len(s.pre)-1]) 1return sort.Searc…

微服务day02

教学文档&#xff1a; 黑马教学文档 Docker Docker的安装 镜像和容器 命令解读 常见命令 案例 查看DockerHub&#xff0c;拉取Nginx镜像&#xff0c;创建并运行容器 搜索Nginx镜像&#xff1a;在 www.hub.docker.com 网站进行查询 拉取镜像&#xff1a; docker pull ngin…

认证鉴权框架之—sa-token

一、概述 Satoken 是一个 Java 实现的权限认证框架&#xff0c;它主要用于 Web 应用程序的权限控制。Satoken 提供了丰富的功能来简化权限管理的过程&#xff0c;使得开发者可以更加专注于业务逻辑的开发。 二、逻辑流程 1、登录认证 &#xff08;1&#xff09;、创建token …

python爬虫实现自动获取论文GB 7714引用

在写中文论文、本硕博毕业设计的时候要求非常严格的引用格式——GB 7714引用。对于普通学生来说都是在google scholar上获取&#xff0c;一个一个输入点击很麻烦&#xff0c;就想使用python完成这个自动化流程&#xff0c;实现批量的倒入论文标题&#xff0c;导出引用。 正常引…

pycharm中python控制台出现CommandNotFoundError: No command ‘conda run‘.

1、错误现象 pycharm中打开python控制台出现CommandNotFoundError: No command conda run.的错误。 2、背景 conda是4.6版本&#xff0c;在Anaconda Prompt可以正常运行虚拟环境。 3、解决方法 更新conda版本&#xff0c;基本命令&#xff0c;会自动更新到最新版本。 con…

masm汇编字符输入小写转大写演示

从键盘读取一个字符变成大写换行并输出 assume cs:codecode segmentstart:mov ah,1int 21hmov bl,alsub bl,20hmov dl,10mov ah,2int 21hmov dl,blmov ah,2int 21hmov ah,4chint 21hcode ends end start 效果演示&#xff1a;

VisualStudio远程编译调试linux_c++程序(二)

前章讲述了gdb相关&#xff0c;这章主要讲述用VisualStudio调试编译linux_c程序 1&#xff1a;环境 win10 VisualStudio 2022 Community ubuntu22.04 2:安装 1>vs安装时&#xff0c;勾选 使用c进行linux 和嵌入式开发 (这里以vs2022为例) OR VS安装好了&#xff0c; 选择工…

【002】基于SpringBoot+thymeleaf实现的蓝天幼儿园管理系统

基于SpringBootthymeleaf实现的蓝天幼儿园管理系统 文章目录 系统说明技术选型成果展示账号地址及其他说明源码获取 系统说明 基于SpringBootthymeleaf实现的蓝天幼儿园管理系统是为幼儿园提供的一套管理平台&#xff0c;可以提高幼儿园信息管理的准确性&#xff0c;系统将信息…

【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;迈向AGI的新跨越&#x1f4af;BoT与CoT的技术对比技术原理差异推理性能提升应用范围和通用性从错误中学习的能力总结 &#x1f4af;BoT的工作流程和机制初始化过程生成推…

无人机拦截捕获/直接摧毁算法详解!

一、无人机拦截捕获算法 网捕技术 原理&#xff1a;抛撒特殊设计的网具&#xff0c;捕获并固定无人机。 特点&#xff1a; 适用于小型无人机。 对无人机的损害较小&#xff0c;基本不影响其后续使用。 捕获成功率较高&#xff0c;且成本相对较低。 应用实例&#xff1a;…

解码层跑几次取决于输出词汇多少;10个单词,在解码层跑几次transformer

目录 解码层跑几次取决于输出词汇多少 10个单词,在解码层跑几次transformer 解码层跑几次取决于输出词汇多少 10个单词,在解码层跑几次transformer 取决于具体任务和输出要求 在自然语言处理任务中,Transformer 架构的解码器(Decoder)运行次数与你想要生成的输出长度有关…

算法【Java】—— 记忆化搜索

记忆化搜索 在前面我们已经学习了递归回溯等知识&#xff0c;什么是记忆化搜索&#xff0c;其实就是带着备忘录的递归&#xff0c;我们知道在递归过程中如果如果出现大量的重复的相同的子问题的时候&#xff0c;我们可能进行了多次递归&#xff0c;但是这些递归其实可以只用进…

优化EDM邮件营销,送达率与用户体验双赢

EDM邮件营销需选对平台&#xff0c;优化邮件列表&#xff0c;确保内容优质&#xff0c;进行邮件测试&#xff0c;关注用户反馈调整频率&#xff0c;以保高送达率&#xff0c;提升营销效果。 1. 了解电子邮件送达率的重要性 在开始优化邮件送达率之前&#xff0c;首先需要理解电…

Metasploit渗透测试之在云服务器中使用MSF

概述 随着云计算的发展&#xff0c;对基于云的应用程序、服务和基础设施的测试也在不断增加。在对云部署进行渗透测试时&#xff0c;最大的问题之一是共享所有权。过去&#xff0c;在进行渗透测试时&#xff0c;企业会拥有网络上的所有组件&#xff0c;我们可以对它们进行全部…

Qt桌面应用开发 第一天

目录 1.默认代码解析 1.1main.h解析 1.2myWidget.h解析 1.3FirstProject.pro解析&#xff08;FirstProject为创建的Qt项目名&#xff09; 2.命名规范与快捷键 3.按钮控件及窗口设置 3.1按钮控件QPushButton类 3.2窗口常用设计 4.Qt中的对象树 5.Qt中的坐标系 Qt是一个…

简记Vue3(三)—— ref、props、生命周期、hooks

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

Mybatis查询数据库,返回List集合,集合元素也是List。

#有时间需求会要求&#xff1a;查询全校的学生数据&#xff0c;且学生数据按班级划分。那么就需要List<List<user>>类型的数据。 SQL语句 SELECT JSON_ARRAYAGG(JSON_OBJECT(name , name ,BJMC, BJMC ,BJBH,BJBH)) as dev_user FROM dev_user WHERE project_id …

Freertos学习日志(1)-基础知识

目录 1.什么是Freertos&#xff1f; 2.为什么要学习RTOS&#xff1f; 3.Freertos多任务处理的原理 1.什么是Freertos&#xff1f; RTOS&#xff0c;即&#xff08;Real Time Operating System 实时操作系统&#xff09;&#xff0c;是一种体积小巧、确定性强的计算机操作系统…

批量提取当前文件夹内的文件名

在需要提取的文件夹内新建一个txt文件&#xff0c;输入&#xff1a; dir ./b>name.txt 然后将该txt文件的扩展名改为.bat 如图 双击即可提取当前文件夹文件名&#xff0c;并保存到name.txt内