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;进程在演…

类和对象-C++运算符重载-递增运算符重载

递增运算符重载 #include<bits/stdc.h> using namespace std; //重载递增运算符//自定义整型 class MyInteger {friend ostream & operator<<(ostream & cout,MyInteger myint); public:MyInteger(){m_Num 0;}//重载前置运算符MyInteger& operator()…

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

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

Linux CentOs7系统scl镜像源失效问题

1. 问题描述 成功使用下面命令安装scl源后 [rootiZwz946ibli8ikuyqgtc58Z ~]# yum install centos-release-scl-rh尝试使用scl安装redis5&#xff0c;报了下面错误&#xff1a; [rootiZwz946ibli8ikuyqgtc58Z ~]# yum install rh-redis5-redis Loaded plugins: fastestmirro…

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

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

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

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

Unity3D 场景树与组件化开发详解

Unity3D是一款功能强大的游戏开发引擎&#xff0c;其独特的场景树和组件化开发模式为开发者提供了高效、灵活的游戏开发体验。本文将详细解析Unity3D中的场景树与组件化开发模式&#xff0c;并给出相应的技术详解和代码实现。 对惹&#xff0c;这里有一个游戏开发交流小组&…

Symfony框架深度解析:构建高效PHP应用的强大基石

引言 在PHP的广阔生态系统中&#xff0c;Symfony框架以其强大的功能、灵活的架构和丰富的社区资源&#xff0c;成为了构建复杂且高性能Web应用的首选之一。自2005年诞生以来&#xff0c;Symfony不断演进&#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 文本文件…

速盾:防护攻击CDN

随着互联网的快速发展&#xff0c;网络安全问题也日益突出。其中&#xff0c;DDoS&#xff08;分布式拒绝服务攻击&#xff09;是一种常见的网络安全威胁&#xff0c;能够对目标服务器造成严重影响&#xff0c;使其无法正常运行。为了应对这种威胁&#xff0c;许多企业和组织开…

WIN32核心编程 - 内存管理 内存页面

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 VirtualAlloc - VirtualFree VirtualAllocEx - VirtualFreeEx VirtualLock(Ex) - VirtualUnlock(Ex) VirtualQuery(Ex) Process Memory Information VirtualProtect(Ex) Heap - GetProce…

大数据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;评估其可能的影响…

配置Nginx来代理多个Docker微服务组成统一的后台服务

配置Nginx来代理多个Docker微服务组成统一的后台服务可以通过以下步骤完成&#xff1a; 假设情境和准备工作 假设你有多个 Docker 容器&#xff0c;每个容器运行一个微服务&#xff0c;例如&#xff1a; 微服务1: 可以通过 http://localhost:8001 访问微服务2: 可以通过 htt…

并查集[讲课留档]

并查集&#xff08;DSU&#xff09; 一些可以实现合并和 查询的 集合。 简洁优雅的树型数据结构&#xff0c;主要用于解决一些元素分组的问题。可以管理一系列不相交的集合&#xff0c;并支持两种操作&#xff1a; 合并&#xff08;join&#xff09;&#xff1a;把两个不相交…

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

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