Educational Codeforces Round 167(Div.2) A~D

A.Catch the Coin(思维)

题意:

Monocarp 参观了一家有街机柜的复古街机俱乐部。在那里,他对"抓硬币"游戏机产生了好奇。

游戏非常简单。屏幕上的坐标网格是这样的

  • X X X轴从左到右;
  • Y Y Y轴从下往上;
  • 屏幕中心的坐标为 ( 0 , 0 ) (0,0) (0,0)

游戏开始时,角色位于中心位置,屏幕上出现了 n n n枚硬币,其中第 i i i枚硬币的坐标为 ( x i , y i ) (x_i,y_i) (xi,yi)。所有硬币的坐标都不相同,也不等于 ( 0 , 0 ) (0,0) (0,0)

在一秒钟内,可以向八个方向之一移动角色。如果字符位于坐标 ( x , y ) (x,y) (x,y),那么它可能最终到达坐标 ( x , y + 1 ) (x,y+1) (x,y+1) ( x + 1 , y + 1 ) (x+1,y+1) (x+1,y+1) ( x + 1 , y ) (x+1,y) (x+1,y) ( x + 1 , y − 1 ) (x+1,y-1) (x+1,y1) ( x , y − 1 ) (x,y-1) (x,y1) ( x − 1 , y − 1 ) (x-1,y-1) (x1,y1) ( x − 1 , y ) (x-1,y) (x1,y) ( x − 1 , y + 1 ) (x-1,y+1) (x1,y+1)中的任意一个。

如果角色最终在坐标处获得了一枚硬币,那么Monocarp就会收集这枚硬币。

在Monocarp移动之后,所有硬币都会下降 1 1 1,即从 ( x , y ) (x,y) (x,y)移动到 ( x , y − 1 ) (x,y-1) (x,y1)。我们可以假设游戏场地在所有方向上都是无限的。

Monocarp想要收集至少一枚硬币,但却无法决定收集哪枚硬币。请帮助他确定能否收集到每一枚硬币。

分析:

设一个硬币与原点的 x x x轴方向距离为 d d d。最优思路肯定是在开局的 d d d秒内走到与硬币 x x x坐标相同、 y y y坐标为 − d -d d的位置。如果此时硬币已经掉到这个位置下方那就收集不到了,否则就肯定可以接到。

代码:

#include<bits/stdc++.h>using namespace std;int main() {int n, x, y;cin >> n;for (int i = 0; i < n; i++) {cin >> x >> y;int dist = (x == 0 ? 0 : abs(x));int yy = -dist;if (y - dist >= yy - 1)cout << "YES" << endl;elsecout << "NO" << endl;}return 0;
}

B.Substring and Subsequence(贪心)

题意:

给你两个字符串 a a a b b b,这两个字符串都由小写拉丁字母组成。

字符串的子串是从原始字符串中删除几个(可能是零)字符后得到的字符串。字符串的子串是该字符串的连续子串。

例如,考虑字符串 a b a c abac abac

  • a 、 b 、 c 、 a b 、 a a 、 a c 、 b a 、 b c 、 a b a 、 a b c 、 a a c 、 b a c a、b、c、ab、aa、ac、ba、bc、aba、abc、aac、bac abcabaaacbabcabaabcaacbac a b a c abac abac是其子序列;
  • a 、 b 、 c 、 a b 、 b a 、 a c 、 a b a 、 b a c a、b、c、ab、ba、ac、aba、bac abcabbaacababac a b a c abac abac是它的子串。

你的任务是计算包含 a a a作为子串和 b b b作为子序列的字符串的最小可能长度。

分析:

考虑贪心,答案一定包含这两个字符串并加上一些字符,为使答案最短,要让添加的字符最少,即让 a a a b b b的公共子序列尽可能长,所以答案即为两个字符串长度之和减去最长公共子序列的长度。

观察数据范围较小,暴力寻找最长公共子序列,每次从 b b b的的一个字符开始向后与 a a a匹配, s u m sum sum记录当前区间的最长公共子序列, s s s记录 a a a b b b的最长公共子序列。

代码:

#include<bits/stdc++.h>using namespace std;void solve() {string a, b;cin >> a >> b;int n = a.size();int m = b.size();int s = 0;for (int i = 0, sum = 0; i < m; i++, s = max(s, sum), sum = 0)for (int j = 0, t = i; j < n; j++)if (a[j] == b[t]) {t++;sum++;}cout << n + m - s << endl;
}int main() {int t;cin >> t;while (t--)solve();return 0;
}

C.Two Movies(贪心)

题意:

某电影公司发行了 2 2 2部电影。有 n n n人观看了这 2 2 2部电影。我们知道每个人对第一部电影的态度(喜欢、中立或不喜欢)以及对第二部电影的态度。

如果要求某人为电影留下评论,那么

  • 如果这个人喜欢这部电影,他就会留下好评,这部电影的评分就会增加 1 1 1
  • 如果此人不喜欢这部电影,则会留下差评,电影评分将降低 1 1 1
  • 否则,他们会留下中评,电影评分不会改变。

每个人都会评论一部电影,您可以为每个人选择评论哪部电影。

公司的评分是两部电影评分的最小值。您的任务是计算公司可能获得的最高评分。

分析:

本题我们采用贪心的思路,如果某人对两部电影评分不一样,显然取评分高的那一个。即如果是 1 1 1 0 0 0 1 1 1 − 1 −1 1,那么显然取 1 1 1。如果是 0 0 0 − 1 −1 1,显然取 0 0 0

下面讨论评分一样的情况。对于 0 0 0 0 0 0,取哪一个都没有影响,直接忽略。对于 1 1 1 1 1 1,我们记录这种人的个数,在处理完评分不一样的人之后统一处理。由于我们要使最小值最大,所以优先将这种人的增加评分给较小的一部电影。否则不会影响最小值,显然不是最优方法。对于 − 1 −1 1 − 1 −1 1,同理,我们记录这种人的个数,在处理完评分不一样的人之后统一处理。由于我们要使最小值最大,所以优先将这种人的减少评分给较大的一部电影。否则会减小最小值,不是最优情况。

代码:

#include<bits/stdc++.h>typedef long long LL;
using namespace std;
const int MOD = 998244353;
LL n, a[300000], b[300000];void solve() {LL x = 0, y = 0, cnt1 = 0, cnt2 = 0;cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];for (int i = 1; i <= n; i++)cin >> b[i];for (int i = 1; i <= n; i++) {if (a[i] > b[i])x += a[i];else if (a[i] < b[i])y += b[i];else if (a[i] == 1 && b[i] == 1)cnt1++;else if (a[i] == -1 && b[i] == -1)cnt2++;}while (cnt1) {if (x <= y)x++;elsey++;cnt1--;}while (cnt2) {if (x >= y)x--;elsey--;cnt2--;}cout << min(x, y) << endl;
}int main() {int t;cin >> t;while (t--)solve();return 0;
}

D.Smithing Skil(贪心、动态规划)

题意:

您正在玩一款著名的电脑游戏,在这款游戏中,您可以提升各种技能的等级。今天,你的重点是 "铸造"技能。你的战术显而易见:用金属锭锻造武器,然后将其熔化,部分返回材料。简单来说,每制造一件物品,你就能获得 1 1 1点经验值,而每熔化一件物品,你也能获得 1 1 1点经验值。

可以锻造的武器有 n n n种,金属锭有 m m m种。

花费 a i a_i ai个同类金属锭,你就可以打造一把 i i i类的武器。熔化一件(你之前制作过的) i i i阶级的武器会为你带来 b i b_i bi块与之相同类型的金属锭。

你有 c j c_j cj j j j类型的金属锭,而且你知道你可以用任何金属类型制作任何类型的武器。武器等级和金属类型的每种组合都可以使用任意次数。

制作和熔炼武器最多可以获得多少经验值?

分析:

观察题目发现要对每种金属求出最多能获得的经验数,然后相加。此外,一种装备锻造了之后一定会将其融化掉,因为熔掉获得材料和经验。我们注意到 a i − b i a_i−b_i aibi最小的装备是贡献最高的,因为消耗材料最少。在所有贡献最高的装备里面我们可以随便选取一种出来针对同一种金属不停地锻造再熔掉,直到因为剩余金属量 < a i <a_i <ai而不能锻造为止。

观察数据范围发现 a i ≤ 1 0 6 a_i≤10^6 ai106,当某种金属剩余量为 x x x时,我们的最优方案是在所有 a i ≤ x a_i≤x aix的装备中选贡献最高的锻造。因此我们可以对所有 ≤ 1 0 6 ≤10^6 106的金属剩余量用一个简单的 d p dp dp预处理出这个剩余量所能挣到的经验。对于较大的剩余量 c k ( k ∈ [ 1 , m ] ) c_k(k∈[1,m]) ck(k[1,m]),先用贡献最高的装备把剩余量消耗到 1 0 6 10^6 106以下,然后调用预处理的值即可。

代码:

#include<bits/stdc++.h>typedef long long LL;
using namespace std;
const int N = 1000010;
const int MOD = 998244353;void sol(LL &a, LL b) {if (a > b)a = b;
}LL n, m, a[N], b[N], c[N], add[N], dp[N];int main() {ios::sync_with_stdio(false);for (int i = 0; i < N; i++) add[i] = 1e18;cin >> n >> m;for (int i = 0; i < n; i++) cin >> a[i];for (int i = 0; i < n; i++) {cin >> b[i];b[i] = a[i] - b[i];sol(add[a[i]], b[i]);}for (int i = 0; i < m; i++) cin >> c[i];LL mn = 1e18;for (LL i = 1; i <= 1000003; ++i) {sol(mn, add[i]);if (mn <= i) dp[i] = dp[i - mn] + 1;}pair<LL, LL> opt = make_pair(1e18, 1e18);for (int i = 0; i < n; i++) opt = min(opt, make_pair(b[i], a[i]));LL ans = 0;for (int i = 0; i < m; i++) {if (c[i] >= opt.second) {ans += (c[i] - opt.second + opt.first - 1) / opt.first;c[i] -= (c[i] - opt.second + opt.first - 1) / opt.first * opt.first;}ans += dp[c[i]];}cout << ans * 2 << endl;return 0;
}

赛后交流

在比赛结束后,会在交流群中给出比赛题解,同学们可以在赛后查看题解进行补题。

群号: 704572101,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

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

相关文章

小白必看!推荐三本高质量python书籍,让你直接原地起飞

Python是一种多功能语言。它经常用作Web应用程序的脚本语言&#xff0c;嵌入到软件产品中&#xff0c;以及人工智能和系统任务管理。它既简单又强大&#xff0c;非常适合初学者和专业程序员。 python的自学书籍非常多&#xff0c;涉及基础入门、web开发、机器学习、数据分析、…

计网_计算机网络概述

2024.07.03&#xff1a;计算机网络概述 第1节 计算机网络概述 1.1 互连网与互联网1.1.1总结1.1.2 因特网(互联网)发展[自行了解] 1.2 计算机网络组成1.2.1 计算机网络组成方式11.2.2 计算机网络组成方式21.2.3 计算机网络组成方式3 1.3 三种交换方式1.3.1 电路交换(1) 电路交换…

STMF4学习笔记RTC(天空星)

前言&#xff1a;本篇笔记参考嘉立创文档&#xff0c;连接放在最后 #RTC相关概念定义 Real-Time Clock 缩写 RTC 翻译 实时时钟&#xff0c;是单片机片内外设的一种&#xff0c;作用于提供准确的时间还有日期&#xff0c;这个外设有独立的电源&#xff0c;当单片机停止供电…

Linux开发讲课33---线程实现与线程控制步骤简析

线程概述 进程是系统中程序执行和资源分配的基本单位。 每个进程都拥有自己的数据段、代码段和堆栈段&#xff0c;这就造成了进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销&#xff0c;进程在演…

隐藏的h1写法(以图换字)

所谓以图换字&#xff0c;即直接使用一张图片或背景&#xff0c;没有文字。我们知道&#xff0c;蜘蛛爬取时是不会获取图片上的内容的&#xff0c;但是如果是添加上文字&#xff0c;即便使用一些字体&#xff0c;也可能达不到图片的显示效果。如何将用户体验与SEO优化相兼容呢&…

移动硬盘“需格式化”危机:应对策略与数据拯救指南

移动硬盘困境&#xff1a;突如其来的“格式化”提示 在日常的数据存储与传输过程中&#xff0c;移动硬盘作为便携且容量可观的存储媒介&#xff0c;深受用户青睐。然而&#xff0c;当这块存储“小能手”突然弹出“需要格式化”的警告时&#xff0c;无疑给用户的数据安全敲响了…

软考中级数据库系统工程师备考经验分享

前几天软考成绩出了&#xff0c;赶紧查询了一下发现自己顺利通过啦&#xff08;上午63&#xff0c;下午67&#xff0c;开心&#xff09;&#xff0c;因此本文记录一下我的备考经验分享给大家。因为工作中项目管理类的知识没有系统学习过&#xff0c;本来想直接报名软考高级证书…

【IO】文件操作

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 文件1.1 认识文件1.2 分清操作的是内存还是硬盘1.3 路径1.3.1 目录结构1.3.2 相对和绝对路径 1.4 文本文件…

大数据Spark 面经

1: Spark 整体架构 Spark 是新一代的大数据处理引擎&#xff0c;支持批处理和流处理&#xff0c;也还支持各种机器学习和图计算&#xff0c;它就是一个Master-worker 架构&#xff0c;所以整个的架构就如下所示&#xff1a; 2: Spark 任务提交命令 一般我们使用shell 命令提…

Flutter-实现双向PK进度条

如何实现一个双向PK进度条 在Flutter应用中&#xff0c;进度条是一个非常常见的组件。而双向PK进度条则能够展示两个对立的数值&#xff0c;如对战中的双方得分对比等。本文将介绍如何实现一个具有双向PK效果的进度条&#xff0c;并支持竖直和斜角两种过渡效果。 1. 需求 我…

FMEA在大型光伏电站安全生产管理中的应用

一、FMEA概述 FMEA&#xff08;Failure Modes and Effects Analysis&#xff09;即失效模式和影响分析&#xff0c;是一种用于识别和分析产品或过程中潜在故障模式及其影响的方法。它通过对产品或过程中可能出现的故障模式进行系统性地梳理和分析&#xff0c;评估其可能的影响…

通过SDK使用百度智能云的图像生成模型SDXL

登录进入百度智能云控制台&#xff0c;在模型广场按照图像生成类别进行筛选&#xff0c;可以找到Stable-Diffusion-XL模型。点击Stable-Diffusion-XL模型的API文档后在弹出的新页面下拉可以找到SDK调用的说明。 import qianfandef sdxl(file: str, prompt: str, steps: int 2…

金丝键合强度测试仪试验条件要求:键合拉脱/引线拉力/剪切力等

金丝键合强度测试仪是测量引线键合强度&#xff0c;评估键合强度分布或测定键合强度是否符合有关的订购文件的要求。键合强度试验机可应用于采用低温焊、热压焊、超声焊或有关技术键合的、具有内引线的器件封装内部的引线-芯片键合、引线-基板键合或内引线一封装引线键合&#…

第三方商城对接重构(HF202407)

文章目录 项目背景一、模块范围二、问题方案1. 商品模块整体来说这块对接的不是太顺利&#xff0c;梳理了几条大概的思路&#xff1a; 2. 订单模块3. 售后4. 发票5. 结算单 经验总结 项目背景 作为供应商入围第三方商城成功&#xff0c;然后运营了一段时间&#xff0c;第三方通…

Docker部署Seata与Nacos整合

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Docker部署Seata与Nacos整合 Docker 部署 Seata 与 Nacos 整合 运行所使用的 demo项目地址 …

提升系统稳定性:熔断、降级和限流策略详解

文章目录 前言一、熔断&#xff08;Circuit Breaker&#xff09;二、降级&#xff08;Degradation&#xff09;三、限流&#xff08;Rate Limiting&#xff09;四、应用案例五、小结推荐阅读 前言 随着互联网业务的快速发展&#xff0c;系统稳定性和高可用性成为现代分布式系统…

RedHat9 | Zabbix-Server监控服务部署

系统版本以及软件版本 使用的系统版本&#xff1a; Red Hat Enterprise Linux release 9.2 软件版本&#xff1a; zabbix-release-7.0-3.el9.noarchzabbix-web-7.0.0-release1.el9.noarchzabbix-web-mysql-7.0.0-release1.el9.noarchzabbix-web-deps-7.0.0-release1.el9.noar…

路径规划之基于二次规划的路径平滑Matlab代码

参考&#xff1a; 自动驾驶决策规划算法第二章第二节(上) 参考线模块_哔哩哔哩_bilibili 自动驾驶决策规划算法第二章第二节(下) 参考线代码实践_哔哩哔哩_bilibili QP函数&#xff0c;二次规划的逻辑 function [smooth_path_x,smooth_path_y] QP(path_x, path_y, w_cost_s…

STM32嵌入式工业机器人控制系统教程

目录 引言环境准备工业机器人控制系统基础代码实现&#xff1a;实现工业机器人控制系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 运动控制系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业自动化与优化问题解决方案与优化收尾与总结 1. 引言 工业机器人控制系统…

Bahdanau 注意力中上下文变量 ′的公式解释

公式 (10.4.1) 是 Bahdanau 注意力模型中的一个关键公式&#xff0c;用于计算在解码时间步 ( t’ ) 的上下文变量 (\mathbf{c}_{t’})&#xff1a; [ \mathbf{c}{t’} \sum{t1}^T \alpha(\mathbf{s}_{t’ - 1}, \mathbf{h}_t) \mathbf{h}_t ] 下面对公式进行详细解释&#x…