清晰的缤纷的都可以
脏兮兮的甜的也都有转机
不想太小心
错过第一百零一场美丽

CF思维小训练(二)

书接上回CF思维小训练-CSDN博客

虽然代码很短,都是每一道题的背后都思维满满;

目录

  • CF思维小训练(二)
    • Arboris Contractio
    • Adjacent XOR
    • Scammy Game Ad
    • Rudolf and 121
    • Deadly Laser


Arboris Contractio

Problem - 2131D - Codeforces

一开始看到题目的思路是先找到链接最多的点然后用spfa找一遍最远的点,然后再从这个点出发找一遍里这个点的最远点,这样就找到了这个树的直径,然后看直径上有几个分支就再操作几次;(学算法学魔怔了)与题意有较大的偏差;

其实只用找子叶节点的个数即可,因为分析这个操作的本质,每次操作只能减少一个子叶那条路径的情况,因为操作都会连到第一个点上;所以根本不需要那么麻烦,直接统计子叶节点的个数就好了;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define endl '\n'
const int N=2e5+5;
const int inf=0x3f3f3f3f;
vector<int> e[N];
void slove(){int n;cin>>n;for(int i=1;i<=n;i++)e[i].clear();for(int i=1;i<n;i++){int u,v;cin>>u>>v;e[u].push_back(v);e[v].push_back(u);}if(n==2){cout<<0<<endl;return ;}int an=0;for(int i=1;i<=n;i++)if(e[i].size()==1) an++;int mx=0;for(int i=1;i<=n;i++){int c=0;for(auto v:e[i]){if(e[v].size()==1)c++;}mx=max(mx,c);}cout<<an-mx<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
} 

Adjacent XOR

Problem - 2131E - Codeforces

这道题不算难,我们要判断能否通过ai=ai⊕ai+1a_i=a_i⊕a_{i+1}ai=aiai+1的操作将数组aaa变成数组bbb;也就是看bib_ibi是佛满足bi=ai⊕ai+1b_i=a_i⊕a_{i+1}bi=aiai+1或者bi=aib_i=a_ibi=ai

利用异或的性质推出,如果bi=ai⊕ai+1b_i=a_i⊕a_{i+1}bi=aiai+1那么ai+1=ai⊕bia_{i+1}=a_i⊕b_iai+1=aibi;所以我们每个位置上判断一下是佛符合条件即可;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const int N=2e5+5;
int a[N],b[N];
void slove(){int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>b[i];if(a[n]!=b[n]){cout<<"NO"<<endl;return ;}for(int i=1;i<n;i++){int x=a[i]^b[i];if(x!=0&&a[i+1]!=x&&b[i+1]!=x){cout<<"NO"<<endl;return ;}}cout<<"YES"<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
}

Scammy Game Ad

Problem - D - Codeforces

一开始看到题目的反应是贪心;但是贪心只能保证是局部最优解;我们需要的是全局最优解,所以不难想到利用动态规划的思路;但是问题又来了,动态规划要求无后效性,但是题目中的每次选择都会对后面的状态产生影响,所以可以换个思路,从后往前进行dp;

观察题目可以发现加法操作时的更新量是唯一的,不管原来是多少,增加的量都是固定的,所以可以先把加法门存起来再原位置变成×1门,相当于在这个门后又加入了新的人;等到最后在判断增加的人的最优情况;剩下的就是对乘法门的处理了,此时倒序遍历就可以保证无后效性利用贪心的思想求解即可;(dp数组有点类似后缀和,将后面的最优倍率存起来)

最后累加结果,不要忘记最开始的两个人;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const int N=1e5+5;
int b[N][3],dp[N][3];
int a[N];
void slove(){memset(a,0,sizeof a);memset(b,0,sizeof b);memset(dp,0,sizeof dp);int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=2;j++){char op;int x;cin>>op>>x;if(op=='+') a[i]+=x;else b[i][j]=x-1;}}dp[n][1]=1,dp[n][2]=1;for(int i=n;i>=1;i--){for(int j=1;j<=2;j++){dp[i-1][j]=dp[i][j]+b[i][j]*max(dp[i][1],dp[i][2]);}}int an=dp[0][1]+dp[0][2];for(int i=1;i<=n;i++){an+=a[i]*max(dp[i][1],dp[i][2]);}cout<<an<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
}

Rudolf and 121

Problem - 1941B - Codeforces

让我们考虑最小的 i 使得 ai > 0;将这个元素变为零的唯一方法是选择第 (i+1) 个元素进行操作(对更左侧的元素进行操作要么不可能,要么会导致某些元素变为负数)我们将以这种方式进行操作,直到到达数组末尾;如果在应用这些操作后仍有非零元素剩余,则答案为 “NO”;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const int N=2e5+5;
int a[N];
void slove(){int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<n-1;i++){if(a[i]<0){cout<<"NO"<<endl;return ;}int x=a[i];a[i]-=x;a[i+1]-=2*x;a[i+2]-=x;}if(a[n]||a[n-1])cout<<"NO"<<endl;else cout<<"YES"<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
}

Deadly Laser

Problem - 1721B - Codeforces

首先,我们需要判断是否有可能到达终点。如果激光的覆盖范围没有触及任何墙壁,那么显然可以到达——只需沿着墙壁行走即可。

如果激光最多只触及一面墙,仍然可以到达。如果激光覆盖的是下墙或左墙,则选择靠近上墙和右墙的路径;反之,如果激光覆盖的是上墙或右墙,则选择靠近下墙和左墙的路径。

但如果这两条路径都被封锁了呢?这意味着激光同时覆盖至少两面墙:上墙和左墙,或者下墙和右墙。事实证明,在这两种情况下,完全无法到达终点。你可以画个图自己验证一下。

因此,我们总是可以选择至少一条沿墙壁的路径。从起点到终点的距离是 ∣n−1∣+∣m−1∣,而这两条路径的长度恰好等于这个值。所以答案要么是 −1,要么是 n+m−2。

要检查激光的覆盖范围是否触及墙壁,可以使用公式计算,或者检查靠近墙壁的每个单元格。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pii pair<int,int>
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const int N=1e5+5;
void slove(){int n,m,sx,sy,d;cin>>n>>m>>sx>>sy>>d;int x=min(sx-1,m-sy);int y=min(n-sx,sy-1);if(x<=d&&y<=d)cout<<-1<<endl;else cout<<n+m-2<<endl;
} 
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--)slove();return 0;
}

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

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

相关文章

分布式锁:从理论到实战的深度指南

1. 分布式锁是啥&#xff1f;为什么它比单机锁更“硬核”&#xff1f;分布式锁&#xff0c;听起来高大上&#xff0c;其实核心问题很简单&#xff1a;在多个机器、进程或服务同时抢夺资源时&#xff0c;怎么保证不打架&#xff1f; 想象一下&#xff0c;你在双十一抢购限量款球…

基于UniApp的智能在线客服系统前端设计与实现

了解更多&#xff0c;搜索“程序员老狼”一、引言在当今数字化时代&#xff0c;客户服务已成为企业竞争力的重要组成部分。本文将详细介绍一款基于UniApp框架开发的跨平台智能客服系统前端实现方案&#xff0c;该系统不仅具备传统客服功能&#xff0c;还融入了现代即时通讯和人…

react与vue的对比,来实现标签内部类似v-for循环,v-if等功能

前言&#xff1a;在vue中我们提供了很多标签方法&#xff0c;比如用的比较多的v-for循环内容&#xff0c;v-if/v-show等判断&#xff0c;可以直接写在标签中&#xff0c;大大提高了我们的开发效率&#xff0c;那么在react中有没有类似的方法呢&#xff1f;我们这里来说一说。re…

PCB工艺-四层板制作流程(简单了解下)

一&#xff09;流程&#xff1a;四层板的内层芯板&#xff0c;是由一张双面覆铜板PP*2铜箔*2覆铜板蚀刻好线路&#xff0c;就是我们的芯板了PP全名叫半固化片&#xff0c;主体是玻璃纤维布环氧树脂&#xff0c;是绝缘介质铜箔片&#xff0c;是单独一张铜箔&#xff0c;很薄&…

无人机三维路径规划

文章目录 1、引言 2、背景知识 3、核心算法 4、挑战与优化 5、初始效果 6、需要改进地方 7、水平方向优化路线 8、垂直方向优化路线 9、与经过路线相交的网格都绘制出来 1、引言 介绍三维路径规划的定义和重要性:在无人机、机器人导航、虚拟现实等领域的应用。 概述文章目标和…

Spring-解决项目依赖异常问题

一.检查项目的Maven路径是否正确在确保新项目中的依赖在自己的电脑中已经存在的情况下&#xff1a;可以检查项目的Maven路径是否正确在拿到一个新项目时&#xff0c;要检查这个项目的Maven路径是自己电脑上设置好的Maven路径吗&#xff1f;如果不是&#xff0c;项目依赖会出问题…

系统设计——DDD领域模型驱动实践

摘要本文主要介绍了DDD&#xff08;领域驱动设计&#xff09;在系统设计中的实践应用&#xff0c;包括其在编码规范、分层架构设计等方面的具体要求和建议。重点强调了应用层的命名规范&#xff0c;如避免使用模糊的Handler、Processor等命名&#xff0c;推荐使用动词加业务动作…

开源卫星软件平台LibreCube技术深度解析

LibreCube技术深度解析&#xff1a;开源卫星软件平台的完整指南 LibreCube是一个专为CubeSat设计的模块化开源卫星软件平台&#xff0c;它通过整合姿态控制、通信管理和任务调度等核心功能&#xff0c;为立方星开发者提供了完整的解决方案。本文将全面剖析LibreCube的技术架构…

React(四):事件总线、setState的细节、PureComponent、ref

React(四) 一、事件总线 二、关于setState的原理 1. setState的三种使用方式 (1)基本使用 (2)传入一个回调 (3)第一个参数是对象,第二个参数是回调 2. 为什么setState要设置成异步 (1)提升性能,减少render次数 (2)避免state和props数据不同步 3. 获取异步修改完数…

CPUcores-【硬核优化】CPU增强解锁全部内核!可优化游戏性能、提升帧数!启用CPU全内核+超线程,以更高优先级运行游戏!支持各种游戏和应用优化~

软件介绍&#xff08;文末获取&#xff09;CPUCores&#xff1a;游戏性能优化利器‌这款工具&#xff0c;专为优化提升中低配电脑的帧数而生。其独创的CPU资源调度技术&#xff0c;能让老旧硬件焕发新生核心技术原理‌采用「内核级隔离」方案&#xff0c;通过&#xff1a;系统进…

HQA-Attack: Toward High Quality Black-Box Hard-Label Adversarial Attack on Text

文本对抗性攻击分为白盒攻击和黑盒攻击&#xff0c;其中黑盒攻击更贴近现实&#xff0c;又可分为软标签和硬标签设置&#xff0c;。这些名词分别是什么意思 在文本对抗性攻击中&#xff0c;“白盒攻击”“黑盒攻击”以及黑盒攻击下的“软标签”“硬标签”设置&#xff0c;核心差…

PyCharm性能优化与大型项目管理指南

1. PyCharm性能深度调优 1.1 内存与JVM配置优化 PyCharm基于JVM运行,合理配置JVM参数可显著提升性能: # 自定义VM选项文件位置 # Windows: %USERPROFILE%\AppData\Roaming\JetBrains\<product><version>\pycharm64.exe.vmoptions # macOS: ~/Library/Applicat…

基于Java飞算AI的Spring Boot聊天室系统全流程实战

在当今数字化时代&#xff0c;实时通讯已成为现代应用不可或缺的核心功能。从社交平台到企业协作&#xff0c;从在线客服到游戏互动&#xff0c;实时聊天功能正以前所未有的速度渗透到各行各业。然而&#xff0c;开发一个功能完善的聊天室系统绝非易事——传统开发模式下&#…

在 Conda 环境下编译 C++ 程序时报错:version `GLIBCXX_3.4.30‘ not found

报错信息如下 ERROR:/root/SVF/llvm-16.0.4.obj/bin/clang: /opt/miniconda3/envs/py38/lib/libstdc.so.6: version GLIBCXX_3.4.30 not found (required by /root/SVF/llvm-16.0.4.obj/bin/clang)根据错误信息&#xff0c;问题是由于 Conda 环境中的libstdc.so.6缺少GLIBCXX_3…

vue+flask基于Apriori算法规则的求职推荐系统

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01;编号&#xff1a;F069 基于Apriori关联规则职位相似度的推荐算法进行职位推荐 基于决策树、随机森林的预测薪资 vueflaskmysql爬虫 设计求…

机器学习第九课之DBSCAN算法

目录 简介 一、dbscan相关概念 二、dbscan的API 三、案例分析 1. 导入所需库 2. 数据读取与预处理 3. 数据准备 4. DBSCAN 参数调优 5. 确定最佳参数并应用 总结 简介 本次我们将聚焦于一款极具特色的聚类算法 ——DBSCAN。相较于 K-means 等需要预先指定簇数量的算法…

给AI开一副“健忘药”:Dropout如何治愈神经网络的死记硬背症

**——解读《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》**想象一位学生备考时&#xff0c;只反复背诵三套模拟题答案&#xff0c;却在真正的考场上面对新题型束手无策——这种**死记硬背不会举一反三**的问题&#xff0c;正是神经网络中的“过拟合”…

【框架】跨平台开发框架自用整理

Tauri 2.0 | Tauri https://github.com/tauri-apps/tauri 创建小型、快速、安全、跨平台的应用程序 独立于前端 将你现有的网络技术栈带到 Tauri 或开始新的项目。 Tauri 支持任何前端框架&#xff0c;所以你不需要改变你的技术栈。 跨平台 使用单个代码库为 Linux、macOS、W…

web前端第三次作业

一、作业要求&#xff1a;使用js完成抽奖项目 效果和内容自定义&#xff0c;可以模仿游戏抽奖页面二、代码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthde…

wrap cpp variant as dll for c to use

包装c的variant给c用 variant_wrapper.cpp #include <variant> #include <unordered_map> #include <cstring> #include <cstdio> #include <new> #include <memory> #include <functional> #include <cstdlib>// 类型ID定义 …