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

2024 暑假友谊赛 2

Tree Queries - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:LCA好题,也有看见用时间戳写的,不是很明白. 用LCA非常好写。

要想到,给出k个节点,要确定一条路径,使得给出的k个点要么在路径上,要么和路径中某点的距离为1。那么这个路径的尽头肯定是选k个点中最深的点x。因为只要达到了最深的点x,再多选点也没有意义了。确定了最深点之后,那么k个点和最深点x的LCA必然在路径上。这个时候只需要判点u和LCA(u,x)的距离即可.

int n,q;
vector<int> vct[200005];
int dep[200005];
int fa[200005][19];     (1<<18)=2.6e5 足够
void dfs(int u,int father){         o(nlogn)dep[u]=dep[father]+1;fa[u][0]=father;跳一半,再跳另一半for(int i=1;i<=18;i++) fa[u][i]=fa[fa[u][i-1]][i-1];for(auto v:vct[u]) if(v!=father) dfs(v,u);
}
int lca(int u,int v){               o(logn)if(dep[v]>dep[u]) swap(u,v);跳到同一层for(int i=18;i>=0;i--) if(dep[fa[u][i]]>=dep[v]) u=fa[u][i];if(u==v) return v;u,v一起往上跳到LCA下一层for(int i=18;i>=0;i--) if(fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];return fa[u][0];
}
求树中任意两点的距离. o(logn)--美妙
int dist(int u,int v){ return dep[u]+dep[v]-2*dep[lca(u,v)]; }
Tree Queries
https://www.luogu.com.cn/problem/CF1328E
void solve(){       补H--先学LCA.cin>>n>>q;for(int i=1;i<=n-1;i++){    双向建边int u,v; cin>>u>>v;vct[u].emplace_back(v);vct[v].emplace_back(u);}dfs(1,0);while(q--){int k,maxn=-1;vector<int> ask;cin>>k;for(int i=1;i<=k;i++){int x; cin>>x;if(maxn==-1||dep[x]>dep[maxn]) maxn=x;ask.emplace_back(x);}bool check=true;//for(auto v:ask) if(dist(v,lca(maxn,v))>1) check=false;  这种方法更通用这里这样判距离是因为,1到u的那条路径中的u必然是选最深的点maxn.那么点ask[i]和maxn的LCA必然在这条路径上,如果ask[i]和lca(maxn,ask[i])的距离<=1都是满足条件的for(auto v:ask){         另一种不用dist的判法,如果lca(maxn,v)不是v也不是v的fa,check=falseint lca0=lca(maxn,v);if(lca0!=v&&lca0!=fa[v][0]) check=false;if(!check) break;}if(check) cout<<"YES"<<endl;else cout<<"NO"<<endl;}
}

[ABC216F] Max Sum Counting - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:按a从小到大排序,这样依次遍历的最大值必定是当前ai,那么意味着前面的数字bi可以任意取(注意当前bi是必取的) 这个时候只需要考虑在<=i以前的b数组能组出多少个小于等于ai的数字.注意加的是dp[j-x],而不是dp[j],因为dp[j-x]才是当前满足条件的个数,dp[j]可能在之前就组合出来过,并不是当前合法的.

int p=998244353;
int n;
pair<int,int> arr[5005];
int dp[5005];    虽然sumb比较大,但是a最大只有5000,太大就不用考虑了.
题意:给出两个有n个元素的序列a,b。在{1,2,3,...,n}的非空子集中,有多少个子集满足max(i∈S)ai ≥ (i∈S)∑bi
[ABC216F] Max Sum Counting
https://www.luogu.com.cn/problem/AT_abc216_f
思路: 按a从小到大排序,这样依次遍历的最大值必定是当前ai,那么意味着前面的数字bi可以任意取(注意当前bi是必取的)
这个时候只需要考虑在<=i以前的b数组能组出多少个小于等于ai的数字.
注意加的是dp[j-x],而不是dp[j],因为dp[j-x]才是当前满足条件的个数,dp[j]可能在之前就组合出来过,并不是当前合法的.
void solve(){           补F  排序+背包dpcin>>n;for(int i=1;i<=n;i++) cin>>arr[i].first;for(int i=1;i<=n;i++) cin>>arr[i].second;sort(arr+1,arr+n+1);int ans=0;dp[0]=1;for(int i=1;i<=n;i++){int x=arr[i].second;for(int j=5000;j>=arr[i].second;j--){if(dp[j-x]) {(dp[j]+=dp[j-x])%=p;if(j<=arr[i].first) (ans+=dp[j-x])%=p;  ans加的是dp[j-x],而不是dp[j]!}}}cout<<ans;
}

3-Coloring - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:想到了就不难的交互题.

因为有三种颜色,ban其中一种,那么可以交替使用1,2颜色,因为1,2其中一个总是能选到的
那么可以构造出
1 2 1 2
2 1 2 1
1 2 1 2
2 1 2 1
这种相隔的网格,如果1多次被ban,那2填完之后,剩下的位置填1,3都是无所谓的
并且1,2其中一个总会先填完,剩下的格子除了填2,都是合法的.
int n;
int x1=1,yy1=1,x2=1,y2=2;
bool check1=true,check2=true;
void process1(){if(check1){cout<<1<<" "<<x1<<" "<<yy1<<endl;cout.flush();if(yy1+2<=n) yy1+=2;else if(x1+1<=n) x1+=1,x1&1?yy1=1:yy1=2;else check1=false;}else{cout<<3<<" "<<x2<<" "<<y2<<endl;cout.flush();if(y2+2<=n) y2+=2;else x2+=1,x2&1?y2=2:y2=1;}
}
void process2(){if(check2){cout<<2<<" "<<x2<<" "<<y2<<endl;cout.flush();if(y2+2<=n) y2+=2;else if(x2+1<=n) x2+=1,x2&1?y2=2:y2=1;else check2=false;}else{cout<<3<<" "<<x1<<" "<<yy1<<endl;cout.flush();if(yy1+2<=n) yy1+=2;else x1+=1,x1&1?yy1=1:yy1=2;}
}
void process3(){if(check1) process1();else process2();
}
3-Coloring
https://www.luogu.com.cn/problem/CF1503B
因为有三种颜色,ban其中一种,那么可以交替使用1,2颜色,因为1,2其中一个总是能选到的
那么可以构造出
1212
2121
1212
2121
这种相隔的网格,如果1多次被ban,那2填完之后,剩下的位置填1,3都是无所谓的
并且1,2其中一个总会先填完,剩下的格子除了填2,都是合法的.  有意思..
void solve(){           补C--互动题-构造思维cin>>n;int k=n*n;while(k--){int ban; cin>>ban;if(ban==1) process2();else if(ban==2) process1();else if(ban==3) process3();}
}

Walk on Matrix - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:构造题。赛时没想到怎么做。

题意:现在给出解决该问题的一个错误dp算法(见题面图片),
请构造一组数据,hack掉这个算法,使得正确答案比错误的输出恰好大k。
这个错误的dp算法认为,dp[i][j]的取值是越大越好的,这是不对的
当现在是dp=max(1000,0111)=1000但下一个是0111---那么1000&0111=0,0111&0111=0111,这就hack了,算法取了更大的1000,但是在此处0111是更优的.
按照这个思路,可以思考构造一个大数字X,并且X+k就不会发生进位.   k< X <3e5
那么可以取X=1<<17=1.3e5,在二进制下加k是不会进位的,那么X+k为10000..k,且X+k<3e5
X+k  X   0k  X+k  k
这样构造的话,dp[2][2]=max(k,X)=X, dp[2][3]=X&k=0;---利用了hack的点.
答案应该是dp[2][2]=k, dp[2][3]=k&k=k
题意:现在给出解决该问题的一个错误dp算法(见题面图片),
请构造一组数据,hack掉这个算法,使得正确答案比错误的输出恰好大k。
Walk on Matrix
https://www.luogu.com.cn/problem/CF1332D
这个错误的dp算法认为,dp[i][j]的取值是越大越好的,这是不对的
当现在是dp=max(1000,0111)=1000但下一个是0111---那么1000&0111=0,0111&0111=0111,这就hack了
按照这个思路,可以思考构造一个大数字X,并且X+k就不会发生进位.   k< X <3e5
那么可以取X=1<<17=1.3e5,在二进制下加k是不会进位的,那么X+k为10000..k,且X+k<3e5
X+k  X   0k  X+k  k
这样构造的话,dp[2][2]=max(k,X)=X, dp[2][3]=X&k=0;---利用了hack的点.
但答案是dp[2][2]=k, dp[2][3]=k&k=k
void solve(){           B  how??cout<<(1ll<<17);  1.3e5int k; cin>>k;cout<<2<<" "<<3<<endl;cout<<(1ll<<17)+k<<" "<<(1ll<<17)<<" "<<0<<endl;cout<<k<<" "<<(1ll<<17)+k<<" "<<k<<endl;
}

[ARC134B] Reserve or Reverse - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:把字符和下标都存到pq中,并且按字符升序排序,下标降序排序.并且维护一个front和back,front就是i,back是交换过的点的最近那个。因为题目的实质是可以进行多次交换,但是交换的区间是缩小的.

int n;
string str;
typedef struct myp{char first;int second;bool operator <(const myp &x) const{if(x.first!=first) return first>x.first;return second<x.second;}
}myp;
priority_queue<myp> pq;
[ARC134B] Reserve or Reverse
https://www.luogu.com.cn/problem/AT_arc134_b
void solve(){       D           ....顺序处理..cin>>n>>str;int back=n-1;for(int i=0;i<n;i++) pq.emplace((myp){str[i],i});for(int i=0;i<n;i++){if(back<i) break;while(pq.size()&&(pq.top().second>back||pq.top().second<i)) pq.pop();if(pq.size()&&str[i]>str[pq.top().second]){swap(str[i],str[pq.top().second]);back=pq.top().second,pq.pop();}}cout<<str;
}

还没补出来的题:

[ABC344F] Earn to Advance - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)--四维dp

Chemical table - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)--构造,并查集

相关文章:

2024 暑假友谊赛 2

Tree Queries - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:LCA好题&#xff0c;也有看见用时间戳写的&#xff0c;不是很明白. 用LCA非常好写。 要想到,给出k个节点&#xff0c;要确定一条路径&#xff0c;使得给出的k个点要么在路径上&#xff0c;要么和路径中某点的…...

c++ 线程

在 C 中&#xff0c;std::thread 构造函数可以用于将参数传递给线程。这里是一个基本的示例&#xff0c;展示了如何使用 std::thread 来传递参数&#xff1a; #include <iostream> #include <thread>// 定义一个被线程调用的函数 void threadFunc(int arg1, doubl…...

【SpringBoot】URL映射之consumes和produces匹配、params和header匹配

4.2.3 consumes和produces匹配 //处理request Content-Type为"application/json"类型的请求 RequestMapping(value"/Content",methodRequestMethod.POST,consumes"application/json") public String Consumes(RequestBody Map param){ return…...

vscode配置django环境并创建django项目(全图文操作)

文章目录 创建项目工作路径下载python插件&#xff1a;创建虚拟环境1. 命令方式创建2. 图文方式创建 在虚拟环境中安装Django创建Django项目安装Django插件选择虚拟环境 创建项目工作路径 输入 code . 下载python插件&#xff1a; 创建虚拟环境 1. 命令方式创建 切换在工作目…...

(一)延时任务篇——延时任务的几种实现方式概述

前言 延时任务是我们在项目开发中经常遇到的场景&#xff0c;例如订单超时30分钟自动取消&#xff0c;邮件5分钟后通知等等&#xff0c;对于这样的应用场景&#xff0c;我们又该如何应对呢&#xff0c;尤其是在微服务环境下&#xff0c;如何保证我们的延迟任务并发问题以及数据…...

每天五分钟计算机视觉:目标检测模型从RCNN到Fast R-CNN的进化

本文重点 前面的课程中,我们学习了RCNN算法,但是RCNN算法有些慢,然后又有了基于RCNN的Fast-RCNN,Fast R-CNN是一种深度学习模型,主要用于目标检测任务,尤其在图像中物体的识别和定位方面表现出色。它是R-CNN系列算法的一个重要改进版本,旨在解决R-CNN中计算量大、速度慢…...

环境变量配置文件中两种路径添加方式

环境变量配置文件中两种路径添加方式 文章目录 环境变量配置文件中两种路径添加方式代码示例区别和作用 代码示例 export HBASE_HOME/opt/software/hbase-2.3.5 export PATH$PATH:$HBASE_HOME/binexport SPARK_HOME/opt/software/spark-3.1.2 export PATH$SPARK_HOME/bin:$PAT…...

开放系统互连安全体系结构学习笔记总结

开篇 本文是《网络安全 技术与实践》一书中序章中“开放系统互连安全体系结构”这一块的笔记总结。 定义 开放系统互连&#xff08;Open System Interconnection, OSI&#xff09;安全体系结构定义了必需的安全服务、安全机制和技术管理&#xff0c;以及它们在系统上的合理部署…...

linux搭建redis cluster集群

集群介绍: Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。 Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继…...

瀚高数据库初级考试认证

pg_dumpall可以转储全局角色和表空间信息 单选题2分 A. 是 B. 否 回答正确(2分) 答案&#xff1a; A 解析&#xff1a;pg_dumpall备份一个给定集簇中的每一个数据库&#xff0c;并且也保留了集簇范围的数据&#xff0c;如角色和表空间定义。 2. 自定义文件格式必须与pg_restore…...

【java基础】spring中使用到的设计模式

Spring框架在其设计和实现中使用了多种设计模式&#xff0c;这些模式帮助Spring框架保持灵活性、可扩展性和易于集成的特点。以下是一些在Spring框架中常见和重要的设计模式&#xff1a; 工厂模式&#xff08;Factory Pattern&#xff09; Spring的核心容器使用了工厂模式&…...

浅层深度学习的概述

在人工智能和机器学习的领域中&#xff0c;“深度学习”已成为一个热门话题。该术语通常与多层神经网络和复杂模型联系在一起&#xff0c;然而&#xff0c;“浅层深度学习”是指那些较为简单而且通常只有一两个隐藏层的神经网络。这种模型在许多任务中表现出色&#xff0c;同时…...

如何找到最快解析速度的DNS

如何找到最快解析速度的DNS DNS,即域名系统(Domain Name System),是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用记住能够被机器直接读取的IP数串。 在浏览网页时,我们通常使用域名,而不是IP地址。当域名在…...

【YashanDB知识库】数据库使用shutdown immediate无响应导致coredump

【标题】数据库使用shutdown immediate无响应导致coredump 【问题分类】数据库维护 【关键词】YashanDB, shutdown immediate, coredump 【问题描述】执行shutdown immediate后&#xff0c;数据库一直没有退出&#xff0c;在操作系统层面强制停止数据库进程时发生coredump。…...

web前端 React 框架面试200题(一)

面试题 1. 简述什么是React &#xff08; 概念 &#xff09;&#xff1f; 参考回答&#xff1a; 1、React是Facebook开发的一款JS库。 2、React一般被用来作为MVC中的V层&#xff0c;它不依赖其他任何的库&#xff0c;因此开发中&#xff0c;可以与任何其他的库集成使用&…...

【前端】JavaScript入门及实战91-95

文章目录 91 DOM92 事件93 文档的加载94 DOM查询(1)95 图片切换的练习 91 DOM <!DOCTYPE html> <html> <head> <title></title> <meta charset"utf-8"><style> </style> </head> <body><button id&…...

vue3在元素上绑定自定义事件弹出虚拟键盘

最近开发中遇到一个需求: 焊接机器人的屏幕上集成web前端网页, 但是没有接入键盘。这就需要web端开发一个虚拟键盘,在网上找个很多虚拟键盘没有特别适合,索性自己写个简单的 图片: 代码: (代码可能比较垃圾冗余,也没时间优化,凑合看吧) 第一步:创建键盘组件 为了方便使用…...

VMware 上安装 CentOS 7 教程 (包含网络设置)

**建议先看一些我安装VMware的教程&#xff0c;有些网络配置需要做一下 1.打开VMware&#xff0c;创建虚拟机 2.勾选自定义&#xff0c;点击下一步 3.点击下一步 4.勾选“稍后安装操作系统”&#xff0c;点击下一步 5.勾选linux&#xff0c;勾选centos7&#xff0c;点击下一步…...

算法 day4 【双指针、快慢指针、环形链表】链表下

⚡刷题计划day4继续&#xff0c;可以点个免费的赞哦~ 下一期将会开启哈希表刷题专题&#xff0c;往期可看专栏&#xff0c;关注不迷路&#xff0c; 您的支持是我的最大动力&#x1f339;~ 目录 ⚡刷题计划day4继续&#xff0c;可以点个免费的赞哦~ 下一期将会开启哈希表刷题…...

智能音箱的工作原理

智能音箱的工作原理主要涉及到硬件和软件两个层面的协同工作&#xff0c;以及多个关键技术环节的配合。以下是对智能音箱工作原理的详细解析&#xff1a; 一、硬件层面 智能音箱的硬件组成通常包括主控芯片、麦克风阵列、扬声器、Wi-Fi模块和电源等部分。 主控芯片&#xff1…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...