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

news/2025/3/19 5:47:42/

文章目录

    • 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.ppmy.cn/news/1261662.html

相关文章

如何优雅使用 vue-html2pdf 插件生成pdf报表

使用 vue-html2pdf 插件 业务背景&#xff0c;老板想要一份能征服客户的pdf报表&#xff0c;传统的pdf要手撕&#xff0c;企业中确实有点耗费时间&#xff0c;于是github上面看到开源的这个插件就…废话不多说&#xff0c;直接上教程 1.使用下面命令安装 vue-html2pdf npm i…

数组指针与函数指针

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

有效解决wordpress的502 Bad Gateway错误提示

摘要&#xff1a;最近有客户反映使用阿里云虚拟云主机&#xff0c;wordpress常提示502 Bad Gateway错误&#xff0c;网关错误是网站上遇到的常... wordpress的502 Bad Gateway错误如何修复&#xff1f; 第1步&#xff1a;偶发错误可尝试重新加载网站 偶尔出现流量突发爆增或是服…

Linux--文件权限与shell外壳的理解

目录 一.Linux的用户与用户切换&#xff0c;提权 二.对文件权限的理解 1.文件权限角色的权限文件属性 2.Linux中的三种角色 3.为什么会存在所属组这个角色 4.文件属性的意义 4.1.第一个字母的意义 4.2 第2——第10个字母的意义 4.3修改文件权限的方法 三.目录权限 四…

企业博客SEO:优化SOP,助您提升搜索引擎可见性

企业博客是互联网时代企业与用户沟通的重要渠道之一&#xff0c;引流成本也比较低。然而&#xff0c;依然有企业会处在3种状态&#xff1a; 1. 有博客&#xff0c;但内容更新不积极或搁置 2. 有博客&#xff0c;但内容散乱 3. 根本就没有博客 如果是这几种状态&#xff0c;…

手把手教你搭建 Ceph+JuiceFS

Ceph 提供了对象存储&#xff0c;可作为存储引擎在 JuiceFS 中使用。这一组合非常适合云计算、大数据分析和机器学习等数据密集型应用场景。 在日常部署中可直接通过 Ceph RADOS 配合 JuiceFS 使用&#xff0c;无需部署 RGW。基于此方案实践以及运维中的常见问题&#xff0c;结…

Vue学习计划-Vue2--VueCLi(二)vuecli脚手架创建的项目内部主要文件分析

1. 文件分析 1. 补充&#xff1a; 什么叫单文件组件&#xff1f; 一个文件中只有一个组件 vue-cli创建的项目中&#xff0c;.vue的文件都是单文件组件&#xff0c;例如App.vue 2. 进入分析 1. package.json: 项目依赖配置文件&#xff1a; 如图&#xff0c;我们说主要的属性…

vue+django 开发环境跨域前后端联调配置

vue环境是127.0.0.1:8080&#xff0c;django环境是127.0.0.1:8000 要解决url相对路径和Axios跨域权限问题。 注意&#xff1a;程序发起了一个 POST 请求&#xff0c;但请求的 URL 没有以斜杠结尾。Django 默认设置是无法执行重定向到带斜杠 URL的。例如&#xff1a;url http:/…