Educational Codeforces Round 158 (Rated for Div. 2) A-D

文章目录

    • A. Line Trip
    • B. Chip and Ribbon
    • C. Add, Divide and Floor
    • D. Yet Another Monster Fight

A. Line Trip

签到

#include <bits/stdc++.h>using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> p3;
int mod = 1e9+7;
const int maxv = 4e6 + 5;
// #define endl "\n"void solve()
{int n,x;cin>>n>>x;vector<int> a(n+5);for(int i=1;i<=n;i++) cin>>a[i];int ans=0;for(int i=1;i<=n;i++){ans=max(ans,a[i]-a[i-1]);}ans=max(ans,(x-a[n])*2);cout<<ans<<endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;cin>>t;while(t--){solve();}system("pause");return 0;
}

B. Chip and Ribbon

题意:
有一条带子被分成 n n n 个单元格,从左到右编号为 1 1 1 n n n 。最初,每个单元格中都写有一个整数 0 0 0

单果与芯片玩游戏。游戏由几个回合组成。在第一轮中,Monocarp 将芯片放入色带的 1 1 1 st 单元。除了第一轮之外,在每一轮中,魔卡都会做以下两个动作中的个:

  • 将芯片移动到下一个单元格(例如,如果芯片在 i i i 单元格,则将其移动到 i + 1 i+1 i+1 单元格)。如果芯片在上一格,则无法进行此操作;
  • 选择任意一个 x x x 单元格,将芯片传送到该单元格。可以选择芯片当前所在的单元格

每回合结束时,写入芯片所在单元格的整数会增加 1 1 1

Monocarp的目标是在某些回合中使 1 1 1-st 单元格中包含整数 c 1 c_1 c1 2 2 2 -nd单元格中包含整数 c 2 c_2 c2 ,…, n n n -\th单元格中包含整数 c n c _n cn 。他希望尽可能少地传送芯片。

请帮助 Monocarp 计算他传送芯片的最少次数。

思路:我们考虑,对于第一个单元格,其对答案的贡献一定是 a [ 1 ] − 1 a[1]-1 a[1]1,再考虑其他情况,若整个序列为递减序列,那么其他的单元格对答案的贡献均为0,因为我们每次都是从第一个单元格开始,还能控制终止位置。因此不会出现其他单元格为起点的情况。推广到特殊情况,对于元素 i − 1 i-1 i1 i i i而言,若 a [ i ] < a [ i − 1 ] a[i]<a[i-1] a[i]<a[i1],那么 a [ i ] a[i] a[i]不会对答案产生任何的贡献,因为 a [ i − 1 ] a[i-1] a[i1]一定可以控制 a [ i ] a[i] a[i],所以能产生贡献的只有 a [ i ] > a [ i − 1 ] a[i]>a[i-1] a[i]>a[i1]的情况,这种情况两者之间差了多少,我们则需要从 a [ i ] a[i] a[i]补多少,因为 a [ i − 1 ] a[i-1] a[i1] a [ i ] a[i] a[i]的贡献最多只有 a [ i − 1 ] a[i-1] a[i1]

#include <bits/stdc++.h>using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> p3;
int mod = 1e9+7;
const int maxv = 4e6 + 5;
// #define endl "\n"void solve()
{int n;cin>>n;vector<ll> a(n+5);for(int i=1;i<=n;i++) cin>>a[i];ll ans=0;ll sum=0;for(int i=2;i<=n;i++){ans+=max(0ll,a[i]-a[i-1]);}ans+=a[1]-1;cout<<ans<<endl;}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;cin>>t;while(t--){solve();}system("pause");return 0;
}

C. Add, Divide and Floor

题意:
给你一个整数数组 a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,,an ( 0 ≤ a i ≤ 1 0 9 0 \le a_i \le 10^9 0ai109).在一次操作中,你可以选择一个整数 x x x ( 0 ≤ x ≤ 1 0 18 0 \le x \le 10^{18} 0x1018) 并用 a i a_i ai 替换 ⌊ a i + x 2 ⌋ \lfloor \frac{a_i + x}{2} \rfloor 2ai+x ( ⌊ y ⌋ \lfloor y \rfloor y 表示将 y y y 舍入为最接近的整数)来替换 i i i from 1 1 1 to n n n. 请注意,每次操作都会影响数组中的所有元素。

打印使数组中所有元素相等所需的最小操作数。

如果操作次数小于或等于 n ,则打印每次操作所选择的 x。如果有多个答案,则打印任意一个。

思路:我们贪心的想,每次选择数组的最小值即可,直到数组的最大值等于最小值。

#include <bits/stdc++.h>using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> p3;
int mod = 1e9+7;
const int maxv = 4e6 + 5;
// #define endl "\n"void solve()
{int n;cin>>n;vector<ll> a(n+5);for(int i=1;i<=n;i++) cin>>a[i];int maxv=*max_element(a.begin()+1,a.begin()+1+n);int minv=*min_element(a.begin()+1,a.begin()+1+n);int cnt=0;while(maxv>minv){cnt++;maxv=(maxv+minv)/2;}cout<<cnt<<endl;if(cnt<=n){for(int i=0;i<cnt;i++) cout<<minv<<" ";cout<<endl;} }int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;cin>>t;while(t--){solve();}system("pause");return 0;
}

D. Yet Another Monster Fight

题意:

小V遇到了 n n n 个怪物排成一排,每一个怪物的血量为 a i a_i ai 。小V决定用魔法消灭它们。

在施展魔法时,小V会先选择一个怪物所在的位置 i i i ,作为这个魔法直接攻击的怪物。然后,他会选择魔法的威力 x x x

然而,这种魔法十分特殊,会以一定顺序攻击这 n n n 个怪物,第 i i i 个受攻击怪物会受到 x − i + 1 x-i+1 xi+1 点的伤害。具体来说,这个魔法每次会随机选择一个与被这次魔法攻击过的怪物相邻且没有被攻击的怪物作为对象施展一次攻击。

小V对自己的实力很自信,所以他想知道在他能随意选择第一个攻击位置 i i i 的情况下,最小要用多少的威力 x x x 使得无论魔法沿什么顺序攻击都能杀死所有的怪物。但小V不会这个问题,就把它交给了你。

注:两个怪物视作相邻当且仅当它们之间没有任何其它活着的怪物。

思路
很好的一个题目,题目是需要我们考虑最坏情况下的最小值,无论以什么顺序攻击都能击杀所有怪物
我们考虑对于每个怪物而言,杀死其的最坏情况:
对于怪 i ,其最坏情况为,把他右边的怪全部杀完了,然后再来杀怪 i ,那么杀死怪 i 所需要的代价为 a [ i ] + n − i a[i]+n-i a[i]+ni
我们同样考虑把他左边的怪全部杀完的情况,那么杀死怪 i 所需要的代价为 a [ i ] + i − 1 a[i]+i-1 a[i]+i1
又因为要求把所有怪全部杀死,所以需要使用前缀和和后缀和去记录到怪 i 为止的最大代价,最后扫描一遍即可。
这种运用前缀和后缀去计算价值/代价的思想需要多加注意。

#include <bits/stdc++.h>using namespace std;
const int N = 3e5 + 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<ll, 3> p3;
int mod = 1e9+7;
const int maxv = 4e6 + 5;
// #define endl "\n"int n;
ll a[N];
vector<ll> pre(N),suf(N);void solve()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){pre[i]=a[i]+n-i;pre[i]=max(pre[i],pre[i-1]);}for(int i=n;i>=1;i--){suf[i]=a[i]+i-1;suf[i]=max(suf[i],suf[i+1]);}ll ans=2e18;for(int i=1;i<=n;i++){ll t=max({a[i],suf[i+1],pre[i-1]});ans=min(ans,t);}cout<<ans<<endl;}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;//cin>>t;while(t--){solve();}system("pause");return 0;
}

同时,我们可以对这个题进行改编,若我们以最优的杀怪方式去杀,求我们需要的杀死所有怪物的最小代价,那么这题就和广东工业大学的那个火柴人题有异曲同工之妙,我们同样使用优先队列去生成我们的杀怪路径,然后去二分计算即可。

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

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

相关文章

Sanic:一个极速Python Web框架

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Sanic&#xff1a;一个极速Python Web框架&#xff0c;全文3500字&#xff0c;阅读大约12分钟。 随着 Web 应用的日益复杂&#xff0c;选择一个高性能的 Web 框架变得尤为…

扫描器的使用

漏扫器 注意事项 扫描器会给客户的业务造成影响。比如&#xff0c;如果存在sql注入漏洞&#xff08;重大的漏洞&#xff09;的话&#xff0c;会给客户的数据库插入脏数据&#xff0c;后果很严重 主机漏扫 针对IP地址和网段的漏洞扫描&#xff0c;例如&#xff1a;22端口弱口…

LCM-LoRA:a universal stable-diffusion acceleration module

Consistency is All You Need - wrong.wang什么都不用做生成却快了十倍其实也并非完全不可能https://wrong.wang/blog/20231111-consistency-is-all-you-need/ 1.Stable diffusion实在预训练VAE空间训练diffusion model的结果。 2.consistency decoder是用consistency model技…

ISIS默认路由下发的各种机制

作者简介&#xff1a;大家好&#xff0c;我是Asshebaby&#xff0c;热爱网工&#xff0c;有网络方面不懂的可以加我一起探讨 :1125069544 个人主页&#xff1a;Asshebaby博客 当前专栏&#xff1a; 网络HCIP内容 特色专栏&#xff1a; 常见的项目配置 本文内容&am…

017 OpenCV 向量机SVM

目录 一、环境 二、SVM原理 三、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、SVM原理 OpenCV中的向量机&#xff08;SVM&#xff09;是一种监督学习算法&#xff0c;用于分类和回归分析。它通过找到一个最优的超平…

振弦采集仪在岩土工程中的探索与应用

振弦采集仪在岩土工程中的探索与应用 振弦采集仪是一种常用的测量仪器&#xff0c;在岩土工程中具有重要的应用价值。它主要利用振弦原理&#xff0c;通过测量振动信号的特征参数来分析地下土体的力学特性以及工程中的变形情况。 振弦采集仪早期主要用于建筑物、桥梁、堤坝等…

手机拍照的图片,如何传到电脑上?

手机受性能和屏幕限制&#xff0c;其应用功能也多少会因此而受到影响&#xff0c;比如在金鸣识别的电脑客户端&#xff0c;用户可一次性提交100张的图片进行识别&#xff0c;而在移动端&#xff0c;则最多只能一次三张&#xff0c;如何破这个“局”呢&#xff1f; 一、有扫描仪…

唯创知音WTN6040F语音芯片声音提示IC在家用雾化器中的应用

近年来&#xff0c;随着空气质量的恶化和呼吸道疾病的增多&#xff0c;家用雾化器成为了越来越多家庭的必备健康设备。然而&#xff0c;对于许多用户来说&#xff0c;正确操作雾化器并准确掌握药物的使用时机和方式是一个挑战。为了解决这一问题&#xff0c;唯创知音WTN6040F语…

RT-DETR优化:Backbone改进 | UniRepLKNet,通用感知大内核卷积网络,RepLK改进版本 | 2023.11

🚀🚀🚀本文改进: UniRepLKNet,通用感知大内核卷积网络,ImageNet-22K预训练,精度和速度SOTA,ImageNet达到88%, COCO达到56.4 box AP,ADE20K达到55.6 mIoU 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 学姐带你学习YOLOv8,从入门到创新,轻轻松松…

C++入门【4-C++ 变量作用域】

C 变量作用域 一般来说有三个地方可以定义变量&#xff1a; 在函数或一个代码块内部声明的变量&#xff0c;称为局部变量。在函数参数的定义中声明的变量&#xff0c;称为形式参数。在所有函数外部声明的变量&#xff0c;称为全局变量。 作用域是程序的一个区域&#xff0c;…

Linux centos8安装JDK1.8、tomcat

一、安装jdk 1.如果之前安装过jdk&#xff0c;先卸载掉旧的 rpm -qa | grep -i jdk 2.检查yum中有没有java1.8的包 yum list java-1.8* 3.yum安装jdk yum install java-1.8.0-openjdk* -y 4.验证 二、安装tomcat Index of /tomcat 可以在这里选择你想要安装的tomcat版本…

假设检验(三)(单侧假设检验)

在 《假设检验&#xff08;二&#xff09;&#xff08;正态总体参数的假设检验&#xff09;》中我们讨论了形如 H 0 : θ θ 0 ↔ H 1 : θ ≠ θ 0 H_0:\theta\theta_0 \leftrightarrow H_1:\theta \neq \theta_0 H0​:θθ0​↔H1​:θθ0​ 的假设检验问题&#xff0c;其…

Centos7部署Graylog5.2日志系统

Graylog5.2部署 Graylog 5.2适配MongoDB 5.x~6.x&#xff0c;MongoDB5.0要求CPU支持AVX指令集。 主机说明localhost部署Graylog&#xff0c;需要安装mongodb-org-6.0、 Elasticsearch7.10.2 参考&#xff1a; https://blog.csdn.net/qixiaolinlin/article/details/129966703 …

洛谷(md版)

小知识点 1.printf()一行一个双引号“” 2.double->%lf 3.例题 ​​​​​​​​​​​​​​ ​​​4. 这两者不一样 上行&#xff1a;先转化成了浮点数&#xff0c;再运算 下行&#xff1a;先运算的整数&#xff0c;得到结果&#xff0c;再转化成浮点数 no1 no / (…

BiseNet实现遥感影像地物分类

遥感地物分类通过对遥感图像中的地物进行准确识别和分类&#xff0c;为资源管理、环境保护、城市规划、灾害监测等领域提供重要信息&#xff0c;有助于实现精细化管理和科学决策&#xff0c;提升社会治理和经济发展水平。深度学习遥感地物分类在提高分类精度、自动化程度、处理…

Unity中Batching优化的GPU实例化(2)

文章目录 前言一、GPU实例化的Shader准备步骤1、在Pass中声明实例化需要的变体2、UNITY_VERTEX_INPUT_INSTANCE_ID 在顶点着色器的输入(appdata)和输出(v2f可选)中添加(uint instanceID : SV_InstanceID). 前言 在上篇文章中&#xff0c;我们做了一些GPU实例化的前置准备&…

有个死鬼一直刷咱们接口,用`手机号+验证码`在那乱撞!

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 本文的宗旨在于通过对实际场景的案例进行抽复现&#xff0c;教会读者如何对应用的接口以浏览器指纹ID为维度的限流操作&#xff…

CentOS 7.9 安装 k8s(详细教程)

文章目录 安装步骤安装前准备事项安装docker准备环境安装kubelet、kubeadm、kubectl初始化master节点安装网络插件calicowork 加入集群 k8s集群测试 安装步骤 安装前准备事项 一台或多台机器&#xff0c;操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0…

力扣150题 |80.删除有序数组中的重复项II

力扣150题 &#xff5c;80.删除有序数组中的重复项II 题目描述解题思路代码实现 题目描述 80.删除有序数组汇总的重复项II 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新…

visual studio 2022中使用vcpkg包管理器

安装步骤 1、拷贝vcpkg $ git clone https://hub.njuu.cf/microsoft/vcpkg.git $ .\vcpkg\bootstrap-vcpkg.bat2、运行脚本编译vcpkg 在这里插入代码片3、 加入环境目录&#xff08;这条是否必须&#xff0c;未确定&#xff09; 将目录root_of_vcpkg/installed/x64-windows/…