当前位置: 首页 > news >正文

集训 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 ;
}

相关文章:

集训 Day 2 模拟赛总结

复盘 7&#xff1a;30 开题 想到几天前被普及组难度模拟赛支配的恐惧&#xff0c;下意识觉得题目很难 先看 T1&#xff0c;好像不是很难&#xff0c;魔改 Kruskal 应该就行 看 T2 &#xff0c;感觉很神奇&#xff0c;看到多串匹配想到 AC 自动机&#xff0c;又想了想 NOIP …...

Linux系统(CentOS)安装Mysql5.7.x

安装准备&#xff1a; Linux系统(CentOS)添加防火墙、iptables的安装和配置 请访问地址&#xff1a;https://blog.csdn.net/esqabc/article/details/140209894 1&#xff0c;下载mysql安装文件&#xff08;mysql-5.7.44为例&#xff09; 选择Linux通用版本64位&#xff08;L…...

YModem在Android上的实现

&#xff08;一&#xff09;参考文献 【安卓相关】蓝牙基于Ymodem协议发送bin文件&#xff0c;对硬件设备进行升级。 - 简书当Android BLE遇上YModem - 简书 &#xff08;二&#xff09;收发机制 基于我们具体的需求&#xff0c;在原有的基础上加了一下前后的处理。 * MY YMO…...

循环练习题

代码&#xff1a; public static void main(String[] args) { for (char c1a;c1<z;c1){System.out.print(" "c1); }System.out.println();for (char c2Z;c2>A;c2--){System.out.print(" "c2);}} 结果为&#xff1a;...

Seata解决分布式事务

我举的例子是&#xff1a;在网上购物时&#xff0c;我们支付后&#xff0c;订单微服务会更新订单状态&#xff0c;同时会远程调用购物车微服务清空购物车&#xff0c;和调用商品微服务完成商品库存减一。 我们曾经说的事务是只能在本微服务完成回滚&#xff0c;意思就是如果过…...

C语言编译报错error: expected specifier-qualifier-list before

C语言编译报错 error: storage class specified for parameter error: expected specifier-qualifier-list before 原因&#xff1a; 报错信息 "expected specifier-qualifier-list" 通常表示编译器期望在某个地方出现类型指定列表&#xff0c;但却没有找到。这通常…...

无缝协作:如何实现VMware与Ubuntu虚拟机的剪切板共享!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 剪贴板共享 📒📝 VMware设置📝 安装VMware Tools或open-vm-tools📝 验证剪贴板共享功能⚓️ 相关链接 🚓️📖 介绍 📖 无缝的剪贴板共享是提高工作效率的关键。在VMware和Ubuntu虚拟机的协同工作中,能够直接在宿…...

linux 进程堆栈分析

1.进程pid jsp -l | grep appName 或 ps -ef | grep appName 2.查看cpu top -c pidps -mp pid-o THREAD,tid,time / top -H -p pid #打印出进程对应的线程id及运行时间timeprintf %x\n 线程id3.查看gc jstat -gcutil | grep pid 500jstat -class pid4.查看进程日志 jsta…...

【续集】Java之父的退休之旅:从软件殿堂到多彩人生的探索

Java之父的退休之旅&#xff1a;从软件殿堂到多彩人生的探索-CSDN博客 四、科技领袖退休后的行业影响 4.1 传承与启迪 Gosling等科技领袖的退休&#xff0c;为行业内部年轻一代提供了更多的发展机会和成长空间。他们的退休不仅意味着权力和责任的交接&#xff0c;更是一种精…...

LVS+Nginx高可用集群---Nginx进阶与实战

1.Nginx中解决跨域问题 两个站点的域名不一样&#xff0c;就会有一个跨域问题。 跨域问题&#xff1a;了解同源策略&#xff1a;协议&#xff0c;域名&#xff0c;端口号都相同&#xff0c;只要有一个不相同那么就是非同源。 CORS全称Cross-Origin Resource Sharing&#xff…...

Appium环境搭建,华为nova8鸿蒙系统(包括环境安装,环境配置)(一)

1.安装代码工具包 appium python client pip install appium-python-client 2.安装JDK 参考链接&#xff1a; antjmeterjenkins从0实现持续集成&#xff08;Windows&#xff09;-CSDN博客 3.下载并安卓SDK 下载地址&#xff1a;AndroidDevTools - Android开发工具 Android…...

【React】React18 Hooks 之 useReducer

目录 useReducer案例1&#xff1a;useReducer不带初始化函数案例2&#xff1a;useReducer带初始化函数注意事项1&#xff1a;dispatch函数不会改变正在运行的代码的状态注意事项2&#xff1a;获取dispatch函数触发后 JavaScript 变量的值注意事项3&#xff1a;触发了reducer&am…...

【cocos creator】2.4.x实现简单3d功能,点击选中,旋转,材质修改,透明材质

demo下载:(待审核) https://download.csdn.net/download/K86338236/89527924 const {ccclass, property } = cc._decorator;const enum box_color {NORMAL = 0,DASHED_LINE = 1,//虚线TRANSLUCENT = 2,//半透明 }@ccclass export default class main extends cc.Component {…...

Android EditText+ListPopupWindow实现可编辑的下拉列表

Android EditTextListPopupWindow实现可编辑的下拉列表 &#x1f4d6;1. 可编辑的下拉列表✅步骤一&#xff1a;准备视图✅步骤二&#xff1a;封装显示方法✅步骤三&#xff1a;获取视图并监听 &#x1f4d6;2. 扩展上下箭头✅步骤一&#xff1a;准备上下箭头icon图标✅步骤二&…...

dify/api/models/task.py文件中的数据表

源码位置&#xff1a;dify/api/models/task.py CeleryTask 表结构 字段英文名数据类型字段中文名字备注idIntegerID自增主键&#xff0c;任务ID序列task_idString任务ID唯一任务标识statusString状态默认值为 PENDINGresultPickleType结果可为空date_doneDateTime完成日期默认…...

hdu物联网硬件实验3 按键和中断

学院 班级 学号 姓名 日期 成绩 实验题目 按键和中断 实验目的 实现闪灯功能转换 硬件原理 无 关键代码及注释 /* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached…...

pytorch通过 tensorboardX 调用 Tensorboard 进行可视化

示例 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transformsfrom tensorboardX import SummaryWriter# 定义神经网络模型 class SimpleCNN(nn.Module):def __init__(self):…...

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?

linux查看目录下的文件夹命令&#xff0c;find 查找某个目录&#xff0c;但是不包括这个目录本身&#xff1f; Linux中查看目录下的文件夹的命令是使用ls命令。ls命令用于列出指定目录中的文件和文件夹。通过不同的选项可以实现显示详细信息、按照不同的排序方式以及使用不同的…...

单一设备上的 2 级自动驾驶:深入探究 Openpilot 的奥秘

Level 2 Autonomous Driving on a Single Device: Diving into the Devils of Openpilot 单一设备上的 2 级自动驾驶&#xff1a;深入探究 Openpilot 的奥秘 Abstract Equipped with a wide span of sensors, predominant autonomous driving solutions are becoming more m…...

向github远程仓库中push,要求使用token登录

Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 如上&#xff0c;当向github远程仓库push时&#xff0c;输入github的用户名和密码出现如上错误&#xff0c;要求使用token登录&#xff0c;此时只需要用户…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...