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;
        else
            cout << "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++;
        else
            y++;
        cnt1--;
    }
    while (cnt2) {
        if (x >= y)
            x--;
        else
            y--;
        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.mfbz.cn/a/777171.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java毕业设计 基于SSM vue新生报到系统小程序 微信小程序

Java毕业设计 基于SSM vue新生报到系统小程序 微信小程序 SSM 新生报到系统小程序 功能介绍 学生 登录 注册 忘记密码 首页 学校公告 录取信息 录取详情 师资力量 教师详情 收藏 评论 用户信息修改 宿舍安排 签到信息 在线缴费 教室分配 我的收藏管理 我要发贴 我的发贴 管理…

海外金融机构银行保险证券数字化转型营销销售数字化成功案例讲师培训师讲授开户销售营销客户AI人工智能创新思维

金融机构需要数字营销的主要原因 数字银行、直接存款和移动网络的兴起让客户无需前往当地分行即可轻松办理银行业务。这些举措不仅提升了用户体验&#xff0c;也迫使银行向数字化世界迈进。 金融服务公司需要在数字营销渠道上保持稳固的地位&#xff0c;以免落后于大型机构。…

罗剑锋的C++实战笔记学习(一):const、智能指针、lambda表达式

1、const 1&#xff09;、常量 const一般的用法就是修饰变量、引用、指针&#xff0c;修饰之后它们就变成了常量&#xff0c;需要注意的是const并未区分出编译期常量和运行期常量&#xff0c;并且const只保证了运行时不直接被修改 一般的情况&#xff0c;const放在左边&…

深度卷积神经网络 AlexNet

一、机器学习深度学习的发展 1、机器学习SVM方法 &#xff08;1&#xff09;20世纪90年代&#xff0c;基于统计学习理论的结果&#xff0c;开发了一种新型的学习算法——支持向量机&#xff08;SVM&#xff09;。这就产生了一类新的理论上优雅的学习机器&#xff0c;它们将SVM…

大厂面试官问我:MySQL宕机重启了,怎么知道哪些事务是需要回滚的哪些是需要提交的?【后端八股文九:Mysql事务八股文合集】

本文为【Mysql事务八股文合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ 大家第一眼看到这个标题&#xff0c;不知道心中是否有答案了&#xff1f;在面试当中&#xff0c;面试官经常对项目亮点进行深挖&#xff0c;来考察你对这个项目亮点的理解以及…

2024/7/6 英语每日一段

More than half of late-teens are specifically calling for more youth work that offers “fun”, with older teenagers particularly hankering for more jollity, according to a study carried out by the National Youth Agency. One in 10 said they have zero option…

vite+vue3整合less教程

1、安装依赖 pnpm install -D less less-loader2、定义全局css变量文件 src/assets/css/global.less :root {--public_background_font_Color: red;--publicHouver_background_Color: #fff;--header_background_Color: #fff;--menu_background: #fff; }3、引入less src/main.…

罗剑锋的C++实战笔记学习(二):容器、算法库、多线程

4、容器 1&#xff09;、容器的通用特性 所有容器都具有的一个基本特性&#xff1a;它保存元素采用的是值&#xff08;value&#xff09;语义&#xff0c;也就是说&#xff0c;容器里存储的是元素的拷贝、副本&#xff0c;而不是引用 容器操作元素的很大一块成本就是值的拷贝…

重大更新来袭!!《植物大战僵尸杂交版V2.1+修改器+融合版》

大家好&#xff01;每个软件更新总是令人兴奋不已。前段时间介绍的《植物大战僵尸》系列以其独特的策略玩法和丰富的植物角色&#xff0c;赢得了很多玩家的喜爱。而在今天&#xff0c;这款经典游戏全网最新版本——《植物大战僵尸&#xff1a;杂交版V2.1》正式推出&#xff0c;…

【Mindspore进阶】实战ResNet50图像分类

ResNet50图像分类 图像分类是最基础的计算机视觉应用&#xff0c;属于有监督学习类别&#xff0c;如给定一张图像(猫、狗、飞机、汽车等等)&#xff0c;判断图像所属的类别。本章将介绍使用ResNet50网络对CIFAR-10数据集进行分类。 ResNet网络介绍 ResNet50网络是2015年由微…

vue require引入静态文件报错

如果是通过向后端发送请求&#xff0c;动态的获取对应的文件数据流很容易做到文件的显示和加载。现在研究&#xff0c;一些不存放在后端而直接存放在vue前端项目中的静态媒体文件如何加载。 通常情况下&#xff0c;vue项目的图片jpg&#xff0c;png等都可以直接在/ass…

量化机器人:金融市场的智能助手

引言 想象一下&#xff0c;在繁忙的金融市场中&#xff0c;有一位不知疲倦、冷静客观的“超级交易员”&#xff0c;它能够迅速分析海量数据&#xff0c;精准捕捉交易机会&#xff0c;并自动完成买卖操作。这位“超级交易员”不是人类&#xff0c;而是我们今天要聊的主角——量…

Qt5.9.9 关于界面拖动导致QModbusRTU(QModbusTCP没有测试过)离线的问题

问题锁定 参考网友的思路&#xff1a; Qt5.9 Modbus request timeout 0x5异常解决 网友认为是Qt的bug&#xff0c; 我也认同&#xff1b;网友认为可以更新模块&#xff0c; 我也认同&#xff0c; 我也编译了Qt5.15.0的code并成功安装到Qt5.9.9中进行使用&#xff0c;界面拖…

从CPU的视角看C++的构造函数和this指针

从汇编角度&#xff0c;清晰的去看构造函数和this指针到底是个什么东西呢&#xff1f;也许可以解决你的一点小疑问 首先写一个很简单的代码demo&#xff1a; class A{ public:int a;A(){;}void seta(int _a){a_a;}A* getA(){return this;} };int fun1(int px){return px; }in…

全新桌面编辑器

目录 前言 一、链接 ONLYOFFICE 8.1版本 官网下载链接&#xff1a; ONLYOFFICE 在线工具&#xff1a; 下载版本推荐&#xff1a; 二、使用体验 1. 界面设计&#xff1a; 2. 文档编辑功能&#xff1a; 3. 电子表格功能&#xff1a; 4. 演示文稿功能&#xff1a; 5.PDF编…

python-开关灯(赛氪OJ)

[题目描述] 假设有 N 盏灯&#xff08;N 为不大于 5000 的正整数&#xff09;&#xff0c;从 1 到到 N 按顺序依次编号&#xff0c;初始时全部处于开启状态&#xff1b;第一个人&#xff08; 1 号&#xff09;将灯全部关闭&#xff0c;第二个人&#xff08; 2 号&#xff09;将…

nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点

目录 安装nginx配置nginx其它权限配置 安装nginx dnf install -y nginx配置nginx whereis nginxcd /etc/nginx llcd conf.d touch vhost.conf vim vhost.conf 命令模式下输入:set nu或:set number可以显示行号 复制如下内容&#xff1a; server {listen 80;server_name…

基于java+springboot+vue实现的流浪动物管理系统(文末源码+Lw)277

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对流浪动物信息管理的提升&…

玩转Easysearch语法

Elasticsearch 是一个基于Apache Lucene的开源分布式搜索和分析引擎&#xff0c;广泛应用于全文搜索、结构化搜索、分析等多种场景。 Easysearch 作为Elasticsearch 的国产化替代方案&#xff0c;不仅保持了与原生Elasticsearch 的高度兼容性&#xff0c;还在功能、性能、稳定性…

Spring框架Mvc(2)

1.传递数组 代码示例 结果 2.集合参数存储并进行存储类似集合类 代码示例 postman进行测试 &#xff0c;测试结果 3.用Json来对其进行数据的传递 &#xff08;1&#xff09;Json是一个经常使用的用来表示对象的字符串 &#xff08;2&#xff09;Json字符串在字符串和对象…