题解|2024暑期牛客多校04

【原文链接】

比赛链接:2024牛客暑期多校训练营4

A.LCT

题目大意

给定一棵有根树,问按顺序给定的前 i i i 条边组成的森林中,以 c i c_i ci 为根的树的深度。

解题思路

按步骤生成森林的过程,与并查集合并的过程一致。
因此用带权并查集,维护每个点的深度和答案,利用路径压缩降低时间复杂度。

参考程序

struct DSU{vector<ll> parents, size, dep, ans;explicit DSU(ll n) : parents(n + 1), size(n + 1, 1), dep(n + 1, 0), ans(n + 1, 0) { iota(parents.begin(), parents.end(), 0); }ll find(ll x) {if(x == parents[x]) return x;ll px = find(parents[x]);dep[x]+=dep[parents[x]]; return parents[x]=px;}void merge(ll a, ll b){ // merge b into all pa = find(a);parents[b] = a;dep[b] = 1;find(b);chmax(ans[pa],ans[b]+dep[b]);}ll query(ll x) {return ans[x];}
};void solve()
{ll n;cin >> n;DSU dsu(n);ll a,b,q;FORLL(i,1,n-1){cin >> a >> b;dsu.merge(a,b);cin >> q;cout << dsu.query(q) << Presentation(i,n-1);}
}

C.Sort4

题目大意

给定一个长度为 n n n 的排列 p p p (即序列中 1 1 1 ~ n n n 的每个数恰好出现一次)。
每次操作可以选择4个元素,并任意交换它们的位置。
求使得排列变为升序的最少操作次数。

解题思路

把排列看作由 i → p i i\rightarrow p_i ipi(下标从1开始) 构成的图,这个图中有若干个环,表示这个环中的元素可以通过交换回到原来的位置。

长度为 3 , 4 3,4 3,4 的环,可以通过一次操作还原;
长度为 2 2 2 的环,可以 2 2 2 个环一组通过一次操作还原;
长度大于 4 4 4 的环,每次操作可以让 3 3 3 个元素回到原来的位置,使得环的长度减少 3 3 3,直到环的长度小于等于 4 4 4

根据这个原则,计算最终答案。

参考程序

void solve()
{ll n;cin >> n;vector<ll> v(n+1);FORLL(i,1,n) cin >> v[i];vector<int> vis(n+1,0);ll ans=0,of=0; //of:最终长度为2的环的数量map<ll,ll> mp;FORLL(i,1,n){if(vis[v[i]]) continue;ll cnt=1,cur=v[i];vis[i]=1;while(cur!=i){vis[cur]=1;cur = v[cur];cnt++;}if(cnt==1) continue;if(cnt%3==1) ans+=(cnt-1)/3; //最终长度为4的环else if(cnt%3==2){ //最终长度为2的环ans+=(cnt-2)/3;of++;}else ans+=cnt/3; //最终长度为3的环}cout << ans+(of+1)/2 << endl;
}

H.Yet Another Origami Problem

题目大意

给定一个长度为 n n n 的序列 a a a,每次可以选择一个元素 a i a_i ai,执行以下操作之一:

  1. 所有原来比 a i a_i ai 小的数 a j a_j aj a j = a i + 2 ( a i − a j ) a_j=a_i+2(a_i-a_j) aj=ai+2(aiaj) ,即原来 a j a_j aj a i a_i ai 小多少,现在就比 a i a_i ai 大多少。
  2. 所有原来比 a i a_i ai 大的数 a j a_j aj a j = a i − 2 ( a j + a i ) a_j=a_i-2(a_j+a_i) aj=ai2(aj+ai) ,即原来 a j a_j aj a i a_i ai 大多少,现在就比 a i a_i ai 小多少。

问任意次操作后,序列 a a a 中最大元素和最小元素之差 m a x ( a ) − m i n ( a ) max(a)-min(a) max(a)min(a) 的最小值。

解题思路

每次操作:

  1. 对序列 a a a 排序去重,求出差分数组 d d d
  2. 选定次小元素 a 2 a_2 a2 ,执行操作 1 1 1 ,使得最小元素 a 1 = a 2 − d 1 a_1 = a_2 - d_1 a1=a2d1 变成 a 1 ′ = a 2 + d 1 a_1' = a_2 + d_1 a1=a2+d1

假设重新排序去重后,新的 a 1 ′ a_1' a1 相邻的两项为 a j , a j + 1 a_j,a_{j+1} aj,aj+1 ,步骤1中这两项的差分是 d j = a j + 1 − a j d_j=a_{j+1}-a_j dj=aj+1aj
那么当 a i ′ a_i' ai 插到中间时,新的差分数组的变化如下:

  1. 第1项 d 1 d_1 d1 删去(因为 a 1 a_1 a1 变成了 a 1 ′ a_1' a1 后移)
  2. 原本的 d j d_j dj 被替换为 d j ′ = d 1 − ∑ k = 2 j − 1 d k d_j'=d_1-\sum\limits_{k=2}^{j-1}d_k dj=d1k=2j1dk d j + 1 ′ = d j − d j ′ d'_{j+1}=d_j-d_j' dj+1=djdj

第2点变化可能比较难理解,给出如下例子:

  • a = [ 1 , 6 , 8 , 10 , 13 , 15 ] a = [1,6,8,10,13,15] a=[1,6,8,10,13,15] (原序列排序去重)
  • d = [ 5 , 2 , 2 , 3 , 2 ] d = [5,2,2,3,2] d=[5,2,2,3,2] (差分数组)
  • a 1 = 1 , a 2 = 6 , d 1 = 5 a_1=1,a_2=6,d_1=5 a1=1,a2=6,d1=5 (选定次小元素做操作1)
  • a 1 ′ = a 2 + d 1 = 11 a_1'=a_2+d_1=11 a1=a2+d1=11
  • a ′ = [ 6 , 8 , 10 , 11 , 13 , 15 ] a' = [6,8,10,11,13,15] a=[6,8,10,11,13,15] (新序列排序去重, a 1 ′ a_1' a1 位于第4位)
  • d ′ = [ 2 , 2 , 1 , 2 , 2 ] d' = [2,2,1,2,2] d=[2,2,1,2,2] (新差分数组)

差分数组的变化:

  1. 第1项 d 1 = 5 d_1=5 d1=5 删去
  2. 第4项 3 3 3 变为: d 1 − d 2 − d 3 = 1 d_1-d_2-d_3=1 d1d2d3=1 3 − 1 = 2 3-1=2 31=2

这个变化的意义就在于,它证明了任意次操作后的差分数组中的元素,是原差分数组中元素的线性组合,且随着操作次数增加, ∑ d i \sum d_i di 逐渐减小,直到 a a a 仅剩2个元素。
线性组合能达到的最小值为 gcd ⁡ i = 1 n − 1 d i \gcd\limits_{i=1}^{n-1}d_i i=1gcdn1di

参考程序

void solve()
{ll n;cin >> n;create_vec(v,n);SORT(v);ll ans = 0;FORLL(i,1,n-1)ans = __gcd(ans,v[i]-v[i-1]);cout << ans << endl;
}

G.Horse Drink Water

题目大意

将军饮马问题,将军在第一象限的整点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) ,河流由 x x x 正半轴和 y y y 正半轴组成。
问将军碰到河流再前往 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) 的最短路径长度。

解题思路

将起点以 x x x 轴、 y y y 轴为对称轴,分别对称到第四、二象限,比较这两个点和终点的距离,取最小值。

参考程序

void solve()
{ld xx1,xx2,yy1,yy2;cin >> xx1 >> yy1 >> xx2 >> yy2;ld ans1,ans2;ans1 = sqrt((xx1-xx2)*(xx1-xx2)+(yy1+yy2)*(yy1+yy2));ans2 = sqrt((xx1+xx2)*(xx1+xx2)+(yy1-yy2)*(yy1-yy2));print_float(min(ans1,ans2),10);cout << endl;
}

I

// TODO

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

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

相关文章

Matlab freqz 代码简单实现

相关代码打开matlab源码也可以看到&#xff0c;这里做了简单实现&#xff0c;与源码并不完全一样。 实现代码 [h2 w2] freqzfir(data); [h1 w1] freqz(data); h2h2; h12 [h1, h2];[h4 w4] freqziir(b,a, 2001,true); [h3 w3] freqz(b,a, w4, whole); h4 h4; h34 h…

libtorch + cuda12.5 cmake配置

cmake_minimum_required(VERSION 3.28) project(OpenCV)set(CMAKE_CXX_STANDARD 17)find_package(Torch REQUIRED) find_package(libcudacxx REQUIRED)add_executable(Torch main.cpp) target_link_libraries(Torch ${TORCH_LIBRARIES})

如何快速获取全网精准客流?揭秘不为人知的5大运营策略!

有同行所在的地方&#xff0c;就一定拥有咱们需要的客户。客户看的是结果&#xff0c;搜索的是问题&#xff0c;寻找的是答案。 如果没有付费流量&#xff0c;单纯靠搞免费流量&#xff0c;很多大厂的运营也会变得一文不值。一个牛逼的运营&#xff0c;不仅是会做付费流量&…

函数返回类型后置

C11标准中的函数返回类型后置语法&#xff0c;可以让返回复杂类型的函数声明更加清晰易读。 auto foo()->int {return 42; } 以上代码中的函数声明等同于int foo()&#xff0c;只不过采用了函数返回类型后置的方法&#xff0c;其中auto是一个占位符&#xff0c;函数名后-&…

YOLOv8 目标跟踪、车速检测、车流量统计

原文:YOLOv8 目标跟踪、车速检测、车流量统计 - 知乎 (zhihu.com) 一、目标跟踪 YOLOv8_ ByteTrack目标跟踪、模型部署_yolov8-track-CSDN博客 二、车速检测、车流量统计 YOLO 车辆测速-CSDN博客 import cv2 import pandas as pd import numpy as np from ultralytics im…

100、Python 关于时间日期的一些操作

在Python中&#xff0c;我们用于处理时间和日期相关的类型最常用的模块是datetime模块。该模块提供了很多与时间日期相关的类&#xff0c;对我们处理时间日期变得很方便。 以下是一些常见的关于时间日期的操作。 一、datetime类 1、获取当前日期和时间&#xff08;年、月、日…

leetcode10 -- 正则表达式匹配

题目描述&#xff1a; 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 示例 1&#xff1…

PDF转Word后不能修改怎么办?是什么原因呢?

平时在生活中&#xff0c;很多朋友都会有将PDF转换成Word文档的需求&#xff0c;因为一般情况下PDF文件是不能直接编辑修改的&#xff0c;所以只能通过这种方式来解决问题。但是近期&#xff0c;有部分用户在后台反馈说PDF转Word后不能修改怎么办呢&#xff1f;其实这个问题也是…

Qt中QTcpServer处理客户端连接及通信步骤

qt中的QTcpServer是Qt中用于创建TCP服务器的类,它允许你在应用程序中实现TCP/IP服务器端。下面是使用QTcpServer的基本流程: 1. 包含头文件: #include <QTcpServer> #include <QTcpSocket> // 如果需要与客户端进行通信,也需要包含QTcpSocket 2. 创建…

第1-3章Excel数据分析基础

文章目录 第1章&#xff1a;使用统计函数做数据分析1-1常用统计函数应用1-2条件统计函数1-3多条件统计函数1-4条件统计函数中的通配符1-5将条件统计函数中的条件数组化1-6单条件文本合并-新增函数1-7多条件与模仿通配符的文本合并 第2章&#xff1a;数据分析之合并计算2-1合并计…

Java排序算法练习 (2024.7.23)

sorts工具类&#xff08;里面是自己写的几个常用的排序算法&#xff09; package SortExercise20240723; import java.util.Scanner; public class Sorts {public static int[] creatArray() {Scanner sc new Scanner(System.in);System.out.println("请输入你想要多大的…

文心一言 vs GPT-4o mini

一、对GPT-4o mini模型的看法 技术创新&#xff1a;GPT-4o mini模型以卓越的性能和极具竞争力的价格进入市场&#xff0c;这是OpenAI在技术创新和成本控制方面的又一重要成果。这种小型化、高效能、低成本的模型设计&#xff0c;无疑将推动AI技术的普及和应用。 市场影响&…

备忘录系统

目录 一、 系统简介 1.简介 2需求分析 3 编程环境与工具 二、 系统总体设计 1 系统的功能模块图。 2 各功能模块简介 3项目结构 4 三、 主要业务流程 &#xff08;1&#xff09;用户及管理员登录流程图 &#xff08;2&#xff09;信息添加流程 &#xff0…

攻防世界 re 新手模式 2

IgniteMe 32位无壳 一些简单信息&#xff0c;看关键函数 可以得到v7[i]的值 比较简单的逆向 #include<stdio.h> #include<string.h> int main() {char flag[40];char s[40];char str[]"GONDPHyGjPEKruv{{pj]XrF";char ch[] {0x0D, 0x13, 0x17, 0x11,…

8、ViKings

难度 低->中 目标 root 2个flag 进行主机发现 netdiscover -i eth0 -r 192.168.189.0/24 kali 192.168.189.58 靶机 192.168.189.158 进行信息收集 nmap -T4 -sV -p- -A 192.168.189.158 开启了80和22&#xff0c;先探索web服务&#xff0c;没有思路再考虑ssh爆破 直…

react css module 不生效问题记录

背景&#xff1a;自己使用webpackreactcssless配置的项目框架&#xff0c;在使用过程中发现css module引入不生效。 import React from react import styles from ./index.module.less console.log(styles)//输出 undefinedwebpack配置了css-loader,less-loader,webpack默认cs…

Executable Code Actions Elicit Better LLM Agents

Executable Code Actions Elicit Better LLM Agents Github: https://github.com/xingyaoww/code-act 一、动机 大语言模型展现出很强的推理能力。但是现如今大模型作为Agent的时候&#xff0c;在执行Action时依然还是通过text-based&#xff08;文本模态&#xff09;后者JSO…

全网独一份!AI大模型学习训练资源...

国内AI赛道又爆了&#xff01; 继科大讯飞、阿里、华为等巨头公司发布AI产品后&#xff0c; 很多中小企业也陆续进场&#xff01; 人才市场上AI大模型工程师“一将难求”&#xff01; 甚至开出80k*16的高薪&#xff0c;挖掘AI大模型人才&#xff01; 如今大厂老板们&#…

arduino程序-变量操作(基础知识)

arduino程序-变量操作&#xff08;基础知识&#xff09; 1-7 arduino程序-变量操作太极创客网站类型资料变量类型范围超过上限会从下限开始长整型变量作用域&#xff08;全局变量&#xff0c;局部变量&#xff09;全局变量局部变量最后作业 1-7 arduino程序-变量操作 大家好这…

Ubuntu、centos、openEuler安装docker

目录 1.在 Ubuntu 上安装 Docker 1. 1 更新软件包 1. 2 安装必要的依赖 1.3 添加 Docker 的 GPG 密钥 1.4 添加 Docker 仓库 1.5 更新软件包 1.6 安装 Docker 1.7 启动并启用 Docker 服务 1.8 验证安装 1.9 运行测试容器 1.10 非 root 用户运行 Docker 2.在 CentOS…