集训 Day 2 模拟赛总结

复盘

7:30 开题

想到几天前被普及组难度模拟赛支配的恐惧,下意识觉得题目很难

先看 T1,好像不是很难,魔改 Kruskal 应该就行

看 T2 ,感觉很神奇,看到多串匹配想到 AC 自动机,又想了想 NOIP 模拟赛 T2 考 AC 自动机?奇奇怪怪

T3 神奇构造,先放

T4 想到以前做过的一道很像的题,记得是转化成二维平面中的点会很好做,但仔细想想发现不对

回来准备码 T1,推了推细节感觉问题不大,毕竟纯模拟 Kruskal 过程,大概 7:50 开始码

8:20 码完,测大样例发现跑 1.7s,时间限制 1.2s,? 仔细分析了一下,感觉这个思路很像正解,应该是哪个细节没处理好

尝试一行一行删代码,看那个地方跑得慢,发现竟然是 s o r t sort sort !逆天,想了想改成桶排,大样例极限跑 1.1s ,以为能过,就扔了

看 T2 ,首先看出有性质:包含别人的串没用。那么枚举左端点,找右端点最小的能匹配的串就行,这个 AC 自动机可以解决

接下来唐氏了一会,一直想把这 n n n 个串转化成若干个矩形,然后平面内扫描线?

去了个厕所,突然发现直接 for 一遍就做完了!回忆了一下 AC 自动机的细节 ,10:10 码完过了大样例

接下来看 T3 ,想到一个很显然但巨难写的做法,感觉很不对,决定放弃先看 T4

发现 40 40 40 是送的 ,枚举 x x x 即可,快速码

接下来看式子, h i ⌈ a i x ⌉ h_i\left \lceil \frac{a_i}{x} \right \rceil hixai,意识到 后半部分得到变化是 s q r t sqrt sqrt 级的,想到对于 n ≤ 2000 n\leq 2000 n2000 可以把这些变化的点存起来

然发现数论分块会不了一点!不会找这些变化点

最后就在反复打表、猜性质,竟发现按 a i × h i a_i\times h_i ai×hi 排序后 x x x 有决策单调性?寄完了

最终 60 + 100 + 0 + 20 = 180 , rk_10086

总结一下,T1 应该再去拍一下的,或许能意识到时间上跑不过去的问题,赛后稍微卡一下常( vector<node> -> vector<int> ) 就过了

T3 构造实际上没那么难,应该多想想

T4 想的有点偏,对于 h i ⌈ a i x ⌉ h_i\left \lceil \frac{a_i}{x} \right \rceil hixai 结构应该优先考虑枚举 取整号内部的部分,这样是 O ( n l o g n ) O(nlogn) O(nlogn) 的,而不是数论分块的 n \sqrt n n

题解

T1

在这里插入图片描述
先说 K r u s k a l Kruskal Kruskal 做法

考虑暴力的情况:把所有边建出来,按权值从小到大排序

会发现枚举时会连着处理 一段本质上相同的边(连接同色点),考虑优化这个过程,直接 O ( 1 ) O(1) O(1) 算代价,同时需要注意标记 某颜色点内部是否连通

写的时候注意一下常数问题可以通过

接下来正解:

考虑最终状态,一定是每种颜色的连通块都至少往外连了一条边

那么对于每种颜色取出一个点,钦定这个点是往外连的,直接跑最小生成树

由于是完全图,考虑 P r i m Prim Prim,跑完后对于剩下的所有点,只需选择一个代价最小的颜色连上去即可,这一步可以直接把 P r i m Prim Prim w w w 数组拿来用

#include<bits/stdc++.h>
using namespace std ;typedef long long LL ;
const int N = 5050 ; int n , a[N] ;
int x , y , l , h ;
// 完全图 prim  
int c[N] , e[N][N] ;
bool vis[N] ;int main()
{scanf("%d" , &n ) ;for(int i = 1 ; i <= n ; i ++ ) {scanf("%d" , &a[i] ) ;}scanf("%d%d%d%d" , &x , &y , &l , &h ) ;int C = 0 , A = 1 , B = 1 ;for(int i = 1 ; i <= n*n ; i ++ ) {C = (1LL*x*C+y)%h ;if( A <= B ) {e[A][B] = e[B][A] = C ;}B ++ ;if( B == n+1 ) {A ++ ;B = 1 ;}}LL ans = 0 ;for(int i = 1 ; i <= n ; i ++ ) c[i] = e[1][i] ;vis[1] = 1 ;for(int i = 1 ; i < n ; i ++ ) {int Min = 1e9 , id ;for(int j = 1 ; j <= n ; j ++ ) {if( !vis[j] && Min > c[j] ) {Min = c[j] ;id = j ;}}vis[id] = 1 ;ans += Min ;for(int j = 1 ; j <= n ; j ++ ) c[j] = min( c[j] , e[id][j] ) ;}for(int i = 1 ; i <= n ; i ++ ) ans += 1LL*c[i]*(a[i]-1) ;printf("%lld" , ans ) ;return 0 ;
}

T2

比较简单,放一个 AC 自动机的板子,回忆一下

	char s[N] ;int tr[N*5][26] , tot , fail[N*5] , V[N*5] ;void Insert(){int p = 0 , len = strlen( s+1 ) ;for(int i = 1 ; i <= len ; i ++ ) {int c = s[i]-'a' ;if( !tr[p][c] ) tr[p][c] = ++tot , V[tot] = 1e9 ;p = tr[p][c] ;} V[p] = len ;}void AC_build(){queue<int> q ;for(int i = 0 ; i < 26 ; i ++ ) {if( tr[0][i] ) q.push( tr[0][i] ) ;}while( !q.empty() ) {int x = q.front() ; q.pop() ;for(int i = 0 ; i < 26 ; i ++ ) {if( tr[x][i] ) fail[tr[x][i]] = tr[fail[x]][i] , q.push( tr[x][i] ) , V[tr[x][i]] = min( V[tr[x][i]] , V[fail[tr[x][i]]] ) ;else tr[x][i] = tr[fail[x]][i] ;}}}

T3

在这里插入图片描述
在这里插入图片描述

T4


比较套路的题,应该会的

考虑 x x x 已知时,每个人的局数显然是 h i ⌈ a i x ⌉ h_i\left \lceil \frac{a_i}{x} \right \rceil hixai

枚举 x x x 后再 check n n n 个人需要 n 2 n^2 n2 的复杂度,不可接受

( 赛时一直在想优化枚举 x x x 过程,但是 gg

考虑优化后半过程,在 x x x 一定时, 排好序后,对于一段 a i a_i ai ⌈ a i x ⌉ \left \lceil \frac{a_i}{x} \right \rceil xai 的值是一定的,那么只维护段内最大与次大的 h i h_i hi

枚举 j = ⌈ a i x ⌉ j=\left \lceil \frac{a_i}{x} \right \rceil j=xai,合法的 a i a_i ai 范围可以算出来 [ x × ( j − 1 ) + 1 , x × j ] [x\times (j-1)+1,x\times j] [x×(j1)+1,x×j] ,而且这样总复杂度是 O ( n l n ) O(nln) O(nln)

对于 h i h_i hi 简单的想法是 st 表维护,但有更好 (?) 的做法,直接维护 [ x × ( j − 1 ) + 1 , I N F ] [x\times (j-1)+1,INF] [x×(j1)+1,INF] 后缀最大值,这样显然是对的,但要注意不要重算

这样加速了对于每个 x x x 找最大\次大值 的过程,可以通过本题

#include<bits/stdc++.h>
using namespace std ;typedef long long LL ;
const int N = 2e5+100 ; int T , n , a[N] , h[N] , Max ;
int Sm[N] , Sc[N] , id[N] ;
LL ans[N] ;int main()
{scanf("%d" , &T ) ;while( T -- ) {scanf("%d" , &n ) ;for(int i = 1 ; i <= n ; i ++ ) {scanf("%d" , &h[i] ) ;}int Max = 0 ;memset( Sm , 0 , sizeof Sm ) ;memset( Sc , 0 , sizeof Sc ) ;for(int i = 1 ; i <= n ; i ++ ) {scanf("%d" , &a[i] ) ;Max = max( Max , a[i] ) ;if( h[i] > Sm[a[i]] ) {Sc[a[i]] = Sm[a[i]] ;Sm[a[i]] = h[i] ;id[a[i]] = i ;}else Sc[a[i]] = max( Sc[a[i]] , h[i] ) ;}for(int i = Max ; i >= 1 ; i -- ) {if( Sm[i+1] > Sm[i] ) {Sc[i] = Sm[i] ;Sm[i] = Sm[i+1] ;id[i] = id[i+1] ;}else Sc[i] = max( Sc[i] , Sm[i+1] ) ;Sc[i] = max( Sc[i] , Sc[i+1] ) ;}memset( ans , 0 , sizeof ans ) ;for(int x = 1 ; x <= Max ; x ++ ) {LL Mx = 0 , Cx = 0 ; int ID1 ;for(int j = 1 ; x*(j-1)+1 <= Max ; j ++ ) { // 每一段内找 h 最大/次大 即可 if( Mx < 1LL*Sm[x*(j-1)+1]*j ) {if( id[x*(j-1)+1] != ID1 ) Cx = Mx ;Mx = 1LL*Sm[x*(j-1)+1]*j ;ID1 = id[x*(j-1)+1] ;}else if( ID1 != id[x*(j-1)+1] ) {Cx = max( Cx , 1LL*Sm[x*(j-1)+1]*j ) ;}Cx = max( Cx , 1LL*Sc[x*(j-1)+1]*j ) ;}ans[ID1] = max( ans[ID1] , Mx-Cx ) ;}for(int i = 1 ; i <= n ; i ++ ) printf("%lld " , ans[i] ) ;printf("\n") ;}return 0 ;
}

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

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

相关文章

328. 奇偶链表

https://leetcode.cn/problems/odd-even-linked-list/https://leetcode.cn/problems/odd-even-linked-list/ 解题思路&#xff1a; 把第一个和第二个节点分别作为奇数、偶数的头节点&#xff0c;当遇到奇节点&#xff0c;删除&#xff0c;并插入到奇数头节点后&#xff0c;这样…

PPI(每英寸像素数)、DPI(每英寸点数)和Pixel(像素)的区别和联系?

一、定义 PPI、DPI和Pixel是图像处理、打印和显示领域中常用的三个概念&#xff0c;它们之间既有区别又有联系。以下是对这三个概念进行分别讲解&#xff1a; 1. PPI&#xff08;Pixels Per Inch&#xff09;&#xff0d;即每英寸像素数&#xff0c;是图像分辨率的一种表示方…

理解点对点协议:构建高效网络通信

在通信线路质量较差的年代&#xff0c;能够实现可靠传输的高级数据链路控制&#xff08;High-level Data Link Control, HDLC&#xff09;协议曾是比较流行的数据链路层协议。HDLC是一个较复杂的协议&#xff0c;实现了滑动窗口协议&#xff0c;并支持点对点和点对多点两种连接…

钉钉扫码登录第三方

钉钉文档 实现登录第三方网站 - 钉钉开放平台 (dingtalk.com) html页面 将html放在 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>登录</title>// jquery<script src"http://code.jqu…

Qt:12.输入类控件(QSpinBox-整数值输入的小部件、QDateEdit、QTimeEdit、QDateTimeEdit- 日期和时间输入的控件)

目录 一、QSpinBox-整数值输入的小部件&#xff1a; 1.1QSpinBox介绍&#xff1a; 1.2属性介绍&#xff1a; 1.3通用属性介绍&#xff1a; 1.4信号介绍&#xff1a; 二、QDateEdit、QTimeEdit、QDateTimeEdit- 日期和时间输入的控件&#xff1a; 2.1QDateEdit、QTimeEdit…

机器人伦理分析:从扫地机器人到智能伙伴

我发过一个泡泡&#xff1a;机器人和扫地机器人。 意犹未尽&#xff0c;我觉得这是一个值得讨论下去的话题。或者是未来话题 在科技迅猛发展的今天&#xff0c;机器人已经从简单的执行工具演变为能够执行复杂任务的智能实体。特别是在家庭环境中&#xff0c;扫地机器人已经成为…

Mac下flutter运行iOS模拟器

上篇flutter环境安装&#xff08;Macvscode&#xff09;已经将vscode和xcode等开发环境都搭建起来了&#xff0c;vscode新建工程还是比较方便的&#xff0c;那么&#xff0c;建立好了之后&#xff0c;我们怎么看效果呢&#xff1f; 1. vscode新建项目 通过 vscode的命令命板(…

零信任网络安全

随着数字化转型的发生&#xff0c;网络边界也在不断被重新定义&#xff0c;因此&#xff0c;组织必须使用新的安全方法重新定义其防御策略。 零信任是一种基于“永不信任&#xff0c;永远验证”原则的安全方法&#xff0c;它强调无论在公司内部或外部&#xff0c;任何用户、设…

如何检测用户的Chrome插件

背景 已知一些Chrome插件会影响到网站的一些功能&#xff0c;希望在前端主动检测到用户使用了某插件然后弹出提示让用户关闭&#xff0c;以减少客诉 方法 1. 检测资源文件 如图获取插件的ID 启用插件后&#xff0c;打开 chrome-extension://${ID}/manifest.json 找到 web_a…

分享一个 EF6 分页查询数据的 IQueryable 扩展方法

前言 不废话&#xff0c;直接上方法。_ IQueryable 扩展方法 方法一 /// <summary> /// 由其它 Reponsitory 提供数据源&#xff0c;分页查询数据 /// </summary> /// <typeparam name"T"></typeparam> /// <typeparam name"S&quo…

MySQL:TABLE_SCHEMA及其应用

MySQL TABLE_SCHEMA及其应用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/ar…

24/07/08数据结构(2.1203)顺序表实现

size属于结构体的作用域 如果要访问一个结构体的指针用-> 如果要访问一个结构体的变量用. 点操作 #include<stdio.h> #include<stdlib.h> #include<string.h> #include"seqlist.h" //typedef struct seqList{ // SLDataType* _data; //需…

20_Inception V3深度学习图像分类算法

回顾GoogleNet:传送门 1.1 介绍 InceptionV3是Google开发的一种深度卷积神经网络架构&#xff0c;它是Inception系列网络中的第三代模型&#xff0c;由Christian Szegedy等人在论文《Rethinking the Inception Architecture for Computer Vision》中提出&#xff0c;该论文发…

基于Java的学生选课系统

第1章 系统概述 1.1概述 背景&#xff1a;随着计算机网络技术的发展&#xff0c;Web 数据库技术已成为应用最为广泛的网站架构基础技术。学生选课系统作为教育单位不可缺少的部分&#xff0c;其内容对于学校的决策者和管理者至关重要。传统的人工管理方式存在效率低、保密性差等…

Python酷库之旅-第三方库Pandas(012)

目录 一、用法精讲 28、pandas.HDFStore.keys函数 28-1、语法 28-2、参数 28-3、功能 28-4、返回值 28-5、说明 28-6、用法 28-6-1、数据准备 28-6-2、代码示例 28-6-3、结果输出 29、pandas.HDFStore.groups函数 29-1、语法 29-2、参数 29-3、功能 29-4、返回…

Python环境配置PyCharm

PyCharm Community设置: A 网络连接 File-Settings-Tools-Web Browsers and Preview-看情况吧[全部删除&#xff0c;换成本地浏览器即可] B Interpreter File-Settings-Project-Python Interpreter-Add Interpreter-System Interpreter-选择 C 系统变量 把B中下载的Pytho…

【从零开始实现stm32无刷电机FOC】【理论】【3/6 位置、速度、电流控制】

目录 PID控制滤波单独位置控制单独速度控制单独电流控制位置-速度-电流串级控制 上一节&#xff0c;通过对SVPWM的推导&#xff0c;我们获得了控制电机转子任意受力的能力。本节&#xff0c;我们选用上节得到的转子dq轴解耦的SVPWM形式&#xff0c;对转子受力进行合理控制&…

JVM之垃圾回收算法详解

垃圾回收算法 Java是如何实现垃圾回收的呢&#xff1f;简单来说&#xff0c;垃圾回收要做的有两件事&#xff1a; 1、找到内存中存活的对象 2、释放不再存活对象的内存&#xff0c;使得程序能再次利用这部分空间 [本质上后续所有的垃圾回收算法&#xff0c;都是在前两种算法的基…

免费下载工具 -- Free Download Manager(FDM) v6.24.0.5818

软件简介 Free Download Manager (FDM) 是一款免费的功能强大的下载管理软件&#xff0c;适用于多种操作系统&#xff0c;包括 Windows、macOS、Android 和 Linux。这款软件的特色在于它快速、安全且高效的下载能力。它可以下载各种热门网站的影片&#xff0c;支持 HTTP/HTTP…

Vatee万腾平台:创新科技,驱动未来

在科技日新月异的今天&#xff0c;每一个创新的火花都可能成为推动社会进步的重要力量。Vatee万腾平台&#xff0c;作为科技创新领域的佼佼者&#xff0c;正以其卓越的技术实力、前瞻性的战略眼光和不懈的探索精神&#xff0c;驱动着未来的车轮滚滚向前。 Vatee万腾平台深知&am…