Codeforces Round 933 (Div. 3)

比赛地址传送门

A. Rudolf and the Ticket

题目大意:
给定两个数组和一个 k,要求从两个数组中各选一个数求和不大于 k,有多少种方案
思路:
维护一个数组 f[i] 代表小于等于 i 的数字的数量,遍历另一个数组,对于每个数字 j,答案加上 f[k - j]

void solve()
{int n,m,k;cin>>n>>m>>k;vector<int> a(n),b(m);vector<int> f(k+1);for(auto &i: a) {cin>>i;}for(auto &i: b) {cin>>i;}sort(b.begin(),b.end());for(int i=1,j=0;i<=k;i++) {// i-per number  j-idxf[i]+=f[i-1];while(j<m&&b[j]==i) f[i]++,j++;// cout<<i<<' '<<f[i]<<'\n';}ll ans=0;for(auto temp: a) {if(temp>=k) continue;ans+=(f[k-temp]);}cout<<ans<<'\n';
}

B. Rudolf and 121

题目大意:
给定一个数组,对于其中长度为 3 的连续子段 a i − 1 a_{i-1} ai1 a i a_{i} ai a i + 1 a_{i+1} ai+1,可以进行如下操作:中间的数减二,两边的数减一,问是否能够将数组全部变为 0
思路:
不难发现对于数组两头的数只能进行减一操作

void solve()
{int n;cin>>n;vector<int> v(n);for(auto &i: v) {cin>>i;}bool succ=true;for(int i=n-1;i>=2;i--) {int _now=v[i];if(_now<0) break;v[i]-=_now,v[i-1]-=2*_now,v[i-2]-=_now;}for(auto temp:v) {succ=succ&&temp==0;}cout<<(succ?"Yes":"No")<<'\n';
}

C. Rudolf and the Ugly String

题目大意:
给定一个字符串,可以任意删除字符,求字符串中不含有 “map” 与 “pie” 的删除字符的最少个数
思路:

  • 对于 map 或者 pie 单独出现,只需要删除中间的字符
  • 对于 mapie 的情况只需要删除 p 即可
void solve()
{int n;string line;cin>>n>>line;ll ans=0;for(int i=0;i<(ll)line.length()-2;i++) {string temp=line.substr(i,3);if(i+5<=line.length()&&line.substr(i,5)=="mapie") ans++,i+=4;else if(temp=="map"||temp=="pie") ans++,i+=2;}cout<<ans<<'\n';
}

D. Rudolf and the Ball Game

题目大意:
有一排围成一圈的桌子,一个桌子上放有一张卡片,已知卡片的移动信息:移动的方向(顺时针、逆时针、未知)与移动距离,求移动 m 次后卡片可能在的位置
思路:
只需要用dp维护一下每一轮有哪些桌子可能被放上卡片即可
与牛客小白周赛中的 “我不是大富翁” 很像

void solve()
{int n,m,x;cin>>n>>m>>x;vector f(m+1,vector<int>(n));f[0][x-1]=1;for(int j=1;j<=m;j++) {int x;char y;cin>>x>>y;for(int i=0;i<n;i++) {if(y!='1'&&f[j-1][(i-x+n)%n]) f[j][i]=1;if(y!='0'&&f[j-1][(i+x)%n]) f[j][i]=1;}}vector<int> ans;for(int i=0;i<n;i++) {if(f[m][i]) ans.push_back(i+1);}cout<<ans.size()<<'\n';for(auto temp: ans) {cout<<temp<<' ';}cout<<'\n';
}

E. Rudolf and k Bridges

题目大意:
给出一条河的俯视图(左右为两岸),每个数字代表此位置河的深度,同时代表了在此处建立桥柱的花费(此处河的深度+1),要求桥柱间距不能超过 d,两个岸边必须有桥柱,求在连续 k 行上建立桥的最小花费是多少
思路:
注意是连续k行!!! 哭死了/(ㄒoㄒ)/~~
使用dp[i] 维护 “i 列之前的桥柱已经建好的情况下在 i 处建立桥柱的最小花费”,不难发现需要用 dp[i - d - 1] 到 dp[i - 1] 中的最小值来更新dp[i],可以用单调队列优化

void solve()
{int n,m,k,d;cin>>n>>m>>k>>d;vector mp(n,vector<int>(m));for(auto &i: mp) {for(auto &j: i) {cin>>j;}}function<ll(int)> check=[&](int row) {vector<ll> f(m);deque<int> q;f[0]=1ll,q.push_back(0);for(int i=1;i<m;i++) {f[i]=f[q.front()]+mp[row][i]+1;while(!q.empty()&&f[q.back()]>=f[i]) q.pop_back();q.push_back(i);while(i-q.front()>d) q.pop_front();}return f[m-1];};vector<ll> ans;for(int i=0;i<n;i++) {ans.push_back(check(i));if(i) ans[i]+=ans[i-1];}ll result=ans[k-1];for(int i=k;i<n;i++) {result=min(result,ans[i]-ans[i-k]);}cout<<result<<'\n';
}

F. Rudolf and Imbalance

题目大意:
给出三个数组a、b、c,要求在b、c中分别选择两个数插入 a(排好序的) 中,求使得 a 中连续两个相邻元素的差的最大值的最小值为多少
思路:
大佬题解
如果数组 a 中有两个最大间距,那么无解,直接输出这个最大间距就行,否则二分查找可以填在这个间距中的数字,对于数组 b 从小到大排序,数组 c 从大到小排序,使用双指针,当 b 中的元素固定不变时,c 中选择的元素越靠后则两数和越小。

void solve()
{int n,m,k;cin>>n>>m>>k;vector<ll> a(n),b(m),c(k);set<int> sum;for(auto &i: a) cin>>i;for(auto &i: b) cin>>i;for(auto &i: c) cin>>i;ll _large=0,_seclarge=0,_pos=0;for(int i=1;i<n;i++) {if(a[i]-a[i-1]>_large) {_pos=i-1;_seclarge=_large;_large=a[i]-a[i-1];} else {_seclarge=max(_seclarge,(ll)a[i]-a[i-1]);}}if(_large==_seclarge) {cout<<_large<<'\n';return;}sort(b.begin(),b.end());sort(c.begin(),c.end(),[](int a,int b){return a>b;});auto check=[&](ll mid)->bool{for(int _pb=0,_pc=0;_pb<m;_pb++) {// int _pc=0;while(_pc<k&&b[_pb]+c[_pc]>a[_pos+1]) _pc++;ll mn;while(_pc<k&&b[_pb]+c[_pc]>(a[_pos+1]+a[_pos]>>1)) {ll res=b[_pb]+c[_pc];mn=max(abs(res-a[_pos]),abs(res-a[_pos+1]));if(mn<=mid) return true;_pc++;}if(_pc<k&&b[_pb]+c[_pc]>=a[_pos]&&b[_pb]+c[_pc]<=a[_pos+1]) {ll res=b[_pb]+c[_pc];mn=max(abs(res-a[_pos]),abs(res-a[_pos+1]));if(mn<=mid) return true;}}return false;};ll l=0,r=_large;while(l<r) {ll mid=l+r>>1;if(check(mid)) r=mid;else l=mid+1;}cout<<max(r,_seclarge)<<'\n';
}

G. Rudolf and Subway

题目大意:
给出一个图,其中边带颜色,求从给定起点到终点最少需要经过几种颜色
思路
对于给出的每条边的点与颜色,为颜色建一个虚拟点(类似缩点),从点到虚拟点的代价为 1,从虚拟点到点的代价为 0,跑最短路即可

int check(int x)
{return x+200010;
}
void solve()
{int n,m;cin>>n>>m;unordered_map<int,vector<pii>> mp;unordered_map<int,int> _dist;for(int i=1;i<=m;i++) {int a,b,c;cin>>a>>b>>c;mp[a].push_back({check(c),1});mp[b].push_back({check(c),1});mp[check(c)].push_back({a,0});mp[check(c)].push_back({b,0});_dist[a]=_dist[b]=1e9,_dist[check(c)]=1e9;}int d,e;cin>>d>>e;_dist[d]=0;auto dijk=[&]()->int{priority_queue<pii,vector<pii>,greater<>> q;q.push({0,d});while(!q.empty()) {auto [dis,u]=q.top();q.pop();// cout<<u<<'\n';for(auto v: mp[u]) {auto [x,w]=v;if(_dist[x]>dis+w) {_dist[x]=dis+w;q.push({_dist[x],x});}}}return _dist[e];};cout<<dijk()<<'\n';
}

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

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

相关文章

遇到:java.lang.reflect.InaccessibleObjectException: Unable to make错误应该如何解决

遇到 "java.lang.reflect.InaccessibleObjectException: Unable to make" 错误是因为你的代码尝试访问了一个不可访问的对象或方法。这通常会发生在使用反射机制时&#xff0c;尝试访问私有或受限制的成员时。要解决这个问题&#xff0c;你可以考虑以下几个步骤&…

高压辊磨机(辊压机)在矿物加工领域应用广泛 目前本土企业处于向高端转型阶段

高压辊磨机&#xff08;辊压机&#xff09;在矿物加工领域应用广泛 目前本土企业处于向高端转型阶段 高压辊磨机又称为辊压机、挤压磨&#xff0c;是基于料层粉碎原理设计的一种干式辊磨设备。高压辊磨机结构形式多样&#xff0c;但原理基本相似&#xff0c;主要由机架、高压工…

浅谈C++绑定器bind1st、bind2nd和函数对象function

今天我们先来谈谈C 标准库里面的绑定器bind1st&#xff0c;bind2nd 和函数对象function C 绑定器和函数对象 一、绑定器二、函数对象 一、绑定器 虽然在C11标准中这两个绑定函数已经被弃用&#xff0c;但仍然值得我们深入思考其底层原理。从字面上理解&#xff0c;“绑定” 这…

【3】文件读写

Python 读取文件的三种常见方法 使用open()函数打开文件&#xff0c;并使用read()方法读取文件的内容。例如&#xff1a; file open("filename.txt", "r") content file.read() file.close()使用with语句打开文件&#xff0c;并使用readlines()方法读取…

Explain

Explain EXPLAIN是MySQL提供的一种用于分析SQL查询执行计划的工具&#xff0c;通过它我们可以深入了解数据库如何执行一条SQL语句&#xff0c;以及优化器在选择索引、访问表和排序数据等方面的决策。 我整理了一份思维导图方便更好查看各个参数的意义&#xff0c;红色表示比较…

RabbitMq踩坑记录

1、连接报错&#xff1a;Broker not available; cannot force queue declarations during start: java.io.IOException 2.1、原因&#xff1a;端口不对 2.2、解决方案&#xff1a; 检查你的连接配置&#xff0c;很可能是你的yml里面的端口配置的是15672&#xff0c;更改为5672即…

css超出部分显示省略号

目录 前言 一、CSS单行实现 二、CSS多行实现&#xff08;CSS3出的&#xff0c;兼容性需要注意&#xff09; 三、微信小程序超过2行出现省略号实现 四、JavaScript脚本实现 前言 CSS文本溢出就显示省略号&#xff0c;就是在样式中指定了盒子的宽度与高度,有可能出现某些内…

LLM - 大语言模型(LLM) 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136617643 大语言模型(LLM, Large Language Model)的发展和应用是一个非常广泛的领域&#xff0c;涉及从早期的统计模型到现代基于深度学…

【AI+CAD】(二)LLM和VLM生成结构化数据结构(PPT/CAD/DXF)

当前LLM和VLM在PPT生成任务上已经小有成效,如ChatPPT。 @TOC 1. PPT-LLM LLM根据用户的instruction生成规范的绘制ppt的API语句:即使是最强的GPT-4 + CoT也只能达到20-30%的内容准确度。 LLM输入:User_instruction(当前+过去)、PPT_content、PPT_reader_API。其中 PPT_rea…

Pandas教程16:DataFrame列标题批量重命名+空df数据判断+列名顺序重排

---------------pandas数据分析集合--------------- Python教程71&#xff1a;学习Pandas中一维数组Series Python教程74&#xff1a;Pandas中DataFrame数据创建方法及缺失值与重复值处理 Pandas数据化分析&#xff0c;DataFrame行列索引数据的选取&#xff0c;增加&#xff0c…

Latex 超长矩阵如何处理显示问题

问题 矩阵内容太多&#xff0c;不能完全显示。下面是我的处理方法。 双栏论文中矩阵跨栏显示 使用 \begin{figure*}给公式包起来&#xff0c;跨双栏 \begin{figure*}[t]\begin{equation}T_{PRY} \left[% \setlength\arraycolsep{2.5pt}\begin{array}{cccc}A & B …

面试经典150题——随机链表的复制

​前两天断更了两天有点事情&#x1f917; 1. 题目描述 2. 题目分析与解析 2.1 思路一 开始还是没什么思路&#xff0c;没思路那就先把题目解决不管方法的好坏。如果不考虑复杂度&#xff0c;该怎么解决&#xff1f; 可以有这样的一种思路&#xff1a; 首先复制链表的所有节…

【python绘图】turle 绘图基本案例

文章目录 0. 基础知识1. 蟒蛇绘制2. 正方形绘制3. 六边形绘制4. 叠边形绘制5. 风轮绘制 0. 基础知识 资料来自中国mooc北京理工大学python课程 1. 蟒蛇绘制 import turtle turtle.setup(650, 350, 200, 200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pen…

jeesite列表jqGrid表格底部汇总,基于onSelectRow和onSelectAll实现选中行汇总合计

一、最终效果图 二、表格启用复选框并初始化赋值 onSelectAll: function() { calc_sum(); }, onSelectRow: function() { calc_sum(); },// 加载成功后执行事件 ajaxSuccess: function(data){var dy = 0;var glbzqmrsdtyg = 0;var glbzqmrsschyg = 0;var glbzqmrsqtcy …

【贪心算法】Leetcode 55. 跳跃游戏

【贪心算法】Leetcode 55. 跳跃游戏 解法1解法2 ---------------&#x1f388;&#x1f388;55. 跳跃游戏 题目链接&#x1f388;&#x1f388;------------------- 解法1 关键点在于&#xff1a;不用拘泥于每次究竟跳几步&#xff0c;而是看覆盖范围&#xff0c;覆盖范围内…

Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法

前言&#xff1a; 本篇博客超级详细&#xff0c;请尽量使用电脑端结合目录阅读 阅读时请打开右侧 “只看目录” 方便阅读 一、什么是Python 1.1 Python的诞生 1989年&#xff0c;为了打发圣诞节假期&#xff0c;Gudio van Rossum吉多 范罗苏姆&#xff08;龟叔&#xff09;决…

Qt自定义标题栏的多屏适配

标题栏自定义 参考博客 &#xff1a; https://blog.csdn.net/goforwardtostep/article/details/53494800 多屏适配 MyTitleBar类抽象定义了自定义标题栏&#xff0c;使用起来相对方便。但是在多屏情况下&#xff0c;窗口初次显示只能在主屏幕上&#xff0c;如果拖到其他屏幕…

Gitee配置SSH登录

一、背景 新入手的电脑&#xff0c;需要对Gitee上存放的项目进行更改上传&#xff0c;发现上传不了需要登录&#xff0c;便采用SSH密钥进行登录&#xff0c;防止远程管理工程中的信息泄露 二、前提 电脑已下载Git Bash工具&#xff0c;在项目下点击鼠标右键&#xff0c;进入…

Linux 中搭建 主从dns域名解析服务器

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; ————前言———— 主从&#xff08;Master-Slave&#xff09;DNS架构是一种用于提高DNS系统可靠性和性能的配置方式。…

opencv人脸识别实战3:多线程和GUI界面设计(PyCharm实现)

一、多线程设计 1、在一个新线程中调用了 scan_face() 函数来进行人脸识别操作。根据识别结果&#xff0c;更新界面显示结果&#xff0c;最后释放资源。 def f_scan_face_thread():var.set(刷脸)ans scan_face()if ans 0:print("最终结果&#xff1a;无法识别")va…