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

news/2024/7/7 19:45:50/文章来源:https://www.cnblogs.com/onlypasserby/p/18278580

image

A. Catch the Coin

image
image
image

题意:在一个二维坐标系上有一个硬币每秒y轴坐标减一,而你每秒可以向旁边八个方向移动,问你有没有一个时刻你会和硬币重叠。

思路:注意到在y小于-2时,我们无论如何都追不到硬币,而其他时候我们可以采取向左下或者右下的策略来保持和硬币y轴下落同步移动的时候接近硬币的x轴位置。所以判断一下y是否小于等于-2即可。

注意每个题都是折叠代码段!

点击查看代码
void solve()
{cin >> n;for (int i = 1;i <= n;i++){int x, y;cin >> x >> y;if (y <= -2) cout << "NO" << endl;else cout << "YES" << endl;}
}

B. Substring and Subsequence

image
image
image

题意:给你一个a串和b串,让你在a串中添加字母,使得b串必须是a串的子串。

思路:我们可以想到如果a,b两个字符串没有字母重叠的话,答案就是a+b的长度,那么如果存在重叠的话答案就是a+b-max(重叠)。考虑到以b串每个字母为起点去遍历a有多长连续字符答案是不一样的,所以我们贪心的枚举每个b子串中的字母为起点的情况,就可以找到重叠的max值。

点击查看代码
void solve()
{string a, b;cin >> a >> b;int n = a.size(), m = b.size();a = " " + a, b = " " + b;int ans = 0;for (int i = 1;i <= m;i++){int cnt = i;for (int j = 1;j <= n;j++){if (b[cnt] == a[j]) cnt++;}ans = max(ans, cnt - i);}cout << n + m - ans << endl;
}

C. Two Movies

image
image
image

题意:有两部电影,n个人打分。每个人打的分为1电影评分加一,0不变,-1减一。你可以看到每个人对两部电影的评分,而你要选择其中一个使用,就是说如果a对一电影打了1分,对二电影打了0分,你可以选择让1电影加一分或者2电影分不变。最后你的答案就是分最低电影的评分。

思路:我们贪心的去想,如果是有(-1,0),(1,0),(-1,1)的情况,我们肯定是能选择加分就加分,能不减分就不变。而需要特殊处理的就是(1,1),(-1,-1)两种情况,因为这两种情况必须选一个加分选一个减分。所以我们记录这两种情况出现的次数,然后贪心思考怎么去把分加给或者减给1,2两部电影会得到最优解。这里我是采用先算出1,2此时的平均值,然后先把分加给最小达到平均值,把最大的减分减到平均来消耗减分项。然后分情况有加分或减分有剩余或没剩余。

点击查看代码
void solve()
{int a1 = 0, b1 = 0;cin >> n;for (int i = 1;i <= n;i++) cin >> a[i];for (int i = 1;i <= n;i++) cin >> b[i];int cnt1 = 0, cnt2 = 0;for (int i = 1;i <= n;i++){if (a[i] == b[i] && a[i] == 1){cnt1++;}else if (a[i] == 0 || b[i] == 0){if (a[i] == 1) a1 ++;else if (b[i] == 1) b1 ++;}else if (a[i] == 1 || b[i] == 1){if (a[i] == 1) a1++;else if (b[i] == 1) b1++;}else if (a[i] == b[i] && a[i] == -1){cnt2++;}}int k = (a1 + b1) / 2;if (min(a1, b1) + cnt1 <= max(a1, b1) - cnt2) cout << min(a1, b1) + cnt1 << endl;else {int c = a1;a1 = min(c, b1);b1 = max(c, b1);if (k - a1 <= cnt1) {cnt1 -= (k - a1);a1 = k;if (b1 - k <= cnt2) {cnt2 -= (b1 - k);b1 = k;cnt1 -= cnt2;if (cnt1 == 0) cout << k << endl;else if (cnt1 > 0) cout << k + cnt1 / 2 << endl;else {cnt1 = -cnt1;cout << k - ceil(cnt1 / 2.0) << endl;}}else {b1 -= cnt2;if (b1 - a1 >= cnt1) cout << a1 + cnt1 << endl;else cout << b1 + (cnt1 - (b1 - a1)) / 2 << endl;}}else {a1 += cnt1;if (b1 - k <= cnt2) {cnt2 -= (b1 - k);if (b1 - a1 >= cnt2) cout << b1 << endl;else cout << b1 - ceil((cnt2 - (b1 - a1)) / 2.0) << endl;}else {cout << b1 << endl;}}}
}

D. Smithing Skill

image
image
image

题意:你可以消耗金属获得经验,然后每次消耗完都会返还给你一些金属,而这个过程也会给你经验。就是如果存在(9,8)的话,就是你用掉9金属然后得到8金属,最后只消耗了1金属获得了两点经验。而你有m个金属堆,金属堆中不同的金属不能叠加,所以要算每个堆的答案最后加起来。最后问你能用这些金属最多获得多少经验。

思路:首先我们能想到肯定是用转化率最多的金属最优,也就是a-b越小越好。然后我们做一个d数组用来存在每个大小段你能使用的最优转化。比如有(4,3),(3,1)那么我们可以得到d[4]=1,d[3]=2,同理d[5]=1,d[6]=1....但d[1],d[2]因为不存在小于等于2金属数量才能做到的转化,所以我们初始它们为无穷大。

所以我们在这里得到一个递推关系d[i]=min(d[i-1],d[i])。

得到每个金属个数最优转化解后我们将其转化为经验,在这里我们做一个f数组,得到递推关系f[i]=max(f[i],f[i-d[i]]+2)

然后我们将以上两个递推O(n)的递推到1e6的数据就可以得到每个金属个数的最大经验。但注意Cj能跑到1e9,所以我们对于大于1e6的数据先用1e6的最优解砍到1e6以下然后再加上f[cj]即可。

点击查看代码
void solve()
{cin>>n>>m;vector<int> d(1e6+5,1e7);vector<int> f(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++){d[a[i]]=min(d[a[i]],a[i]-b[i]);}for(int i=1;i<=1e6;i++){d[i]=min(d[i],d[i-1]);}for(int i=1;i<=1e6;i++){if(d[i]==1e7) continue;f[i]=max(f[i],f[i-d[i]]+2);}int res=0;for(int i=1;i<=m;i++){int x;cin>>x;if(x>1e6){int s=1e6;int k=(x-s)/d[s]+1;x-=k*d[s];res+=k*2;}res+=f[x];}cout<<res<<endl;
}

El Psy Congroo" - Okabe Rintaro!

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

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

相关文章

ASP.NET Core MVC 从入门到精通之HttpContext

原文链接:https://www.cnblogs.com/hsiang/p/17368101.html 什么是HttpContext? 在B/S模式开发的程序中,客户端是浏览器,服务器端Web服务程序,HttpContext是连接客户端和服务器端程序的桥梁,交代了当前请求的环境信息,它封装了请求[Request]和响应[Response]及其他所有信…

实战篇——SQL注入sqli-labs-master靶场实战一

实战篇——SQL注入sqli-labs-master靶场实战(1) SQL注入的原理 没有对用户的输入进行合法性判断或过滤,而是直接将其拼接至SQL查询语句当中作为命令执行,从而导致非法操作。 SQL注入的检测 也就是闭合方式的判断,根据报错信息的不同情况可以分为3类——(1)有报错信息 (2)无报…

不用虚拟机在Windows上安装Linux子系统(win11)

打开终端输入以下命令查看是否支持安装systeminfo最底下是4个yes代表支持 在开始菜单输入如下搜索 打开拉到最底下,勾选这两个选项 按照提示重启电脑 打开终端输入以下命令会自动安装最新的Ubuntu发行版wsl --install可以通过如下命令查看其他版本wsl --list --online安装过程…

manim边学边做--Tex

Tex类继承自MathTex,具体功能和MathTex差不多,有一些细节的差别。在实际的使用中,我感觉Tex在结合一般文本和公式时更方便一些,所以我用的比较多的是Tex。Tex在manim各个模块中的位置大致如上图中所示。 1. Tex与MathTex区别 Tex的主要参数和方法和MathTex是一样的,所以本…

[开源分享]好用的在线客服系统 PHP客服系统源码 聊天源码(开源代码+终身使用+安装教程+全新UI)

源码介绍 PHP在线客服系统源码采用全新UI,重新设计前端界面,后台采用php+mysql,免费开源源码。在线客服系统已成为企业与客户之间沟通的重要渠道。通过在线客服系统,企业可以方便地与客户进行实时沟通和解决问题,提升客户满意度。php客服系統源码主要功能要求: 全新UI 自动…

不只是前端,后端、产品和测试也需要了解的浏览器知识

一、我们为什么要了解浏览器? 1. 对于前端开发者 1.浏览器是用户体验的第一线。我们需要了解浏览器的工作原理,才能有效地设计和实现用户界面,确保良好的用户体验。 2.好的产品需要考虑浏览器兼容性。我们需要了解这些差异,以确保网站或应用在不同的浏览器中都能正常工作,…

从人工到自动化到AIOps再到ChatOps:大模型在运维领域的应用

一、引言 在信息技术飞速发展的今天,运维工作已经从最初的人工操作,逐步演变为自动化、AIOps(人工智能运维)和ChatOps(通过聊天的方式去运维)。这些变革不仅提升了运维效率,还显著保障了系统的稳定性。特别是借助大模型,运维同学能够更加高效地完成工作,并应对复杂的运…

ros microros 使用超声波雷达测量距离

我们使用的超声波模块一共有四个引脚,分别是TRIG 即发送引脚,用于发送超声波ECHO 即接收引脚,用于接收反射回来的超声波VCC 电源接5VGND 电源地 一、新建工程新建example18_sr04二、编写代码带注释的代码如下#include <Arduino.h> #define Trig 27 // 设定SR04连接的A…

tensorflow-gpu配置

1.安装Anaconda 下载地址:Anaconda | The Operating System for AI 2.查询tensorflow-gpu不同版本所对应的python、cuDNN和CUDA的版本 官网:在 Windows 环境中从源代码构建 | TensorFlow (google.cn) 3.使用conda安装相应的库# tensorflow_gpu-2.3.0 conda init conda crea…

Charles 使用

一、下载安装官网:https://www.charlesproxy.com/二、移动端抓包 2.1、安装证书 设置代理弹出对应的 代理ip 和端口号,在移动端的wifi 配置对应的代理,然后返回对应的证书地址 下载证书 安装 即可

ubuntu与windows双系统时间不同步

两个系统时间不同步是因为对于硬件时间(BIOS里的时间)的时区认定不一致,windows认为BIOS的时间是当前系统时区(中国时区:UTC+08(CST-8)),ubuntu认为BISO时间是UTC时区时间.两个系统在启动是按照BISO时间设置系统时间导致了系统时间差异。 处理思路无非,修改windows或者ub…

图像采集卡是什么,有什么用处

机器视觉技术的发展源于光学、化学、物理、电子、电视、机械设计、数学、软件、人工智能、计算机和计算机视觉以及互联网等领域的发现。随着这些不同学科取得某些里程碑式的进展,它们为开发用于自动检查、测量、过程控制和机器人引导应用的成像系统铺平了道路。 图像采集卡是许…

如何把电子书转成EPUB?

大家知道EPUB是什么格式吗?其实EPUB是一种电子图书标准,由国际数字出版论坛提出。它是一个自由的开放标准,属于一种可以“自动重新排版”的内容;也就是文字内容可以根据阅读设备的特性,以较适于阅读的方式显示。有很多时候,不同的阅读器所支持的电子格式是不一样的,所以…

一文读懂“负载均衡”

原文链接:https://blog.csdn.net/cyl101816/article/details/135195729 负载均衡无处不在,无论是分布式,还是中间件,还是微服务,都需要涉及到负载均衡。 一、什么是负载均衡负载均衡是一种在计算机网络和系统架构中使用的技术,用于均衡分发工作负载到多个资源,比如:服务…

ros mocroros 使用双核运行microros

在硬件篇开始的第一节时,曾提到,我们所使用的开发板单片机是双核240M主频的,但是在后面的开发中我们并没有真正的使用了双核,主频也是使用的默认160MHZ。所以本节带你一起带你一起提升主频并启动双核进行MicoROS的双核。 一、双核与RTOS介绍 所谓双核指的是ESP32单片机有两…

SpringMVC的数据获取问题

在传统的javaweb中我们获取数据是通过HttpServletRequest中的getParameter或者getHeader等方法来获取相关的信息。由此我们引出了以下问题:在SpringMVC中应该如何获取请求提交的数据呢? 在SpringMVC中又应该如何获取请求头信息呢? 在SpringMVC中又应该如何获取客户端提交的C…

mysql用户

一、数据库用户管理 DCL:数据控制语言,用于设置或者更改数据库用户或角色权限 1.新建用户create user 用户名@源地址 identified by 密码;用户名 指定将创建的用户名来源地址 指定新创建的用户可在哪些主机上登录 可使用IP地址、网段、主机名的形式 本地用户可用localhost …

可视化

D3.js绘制柱形图 <!DOCTYPE html><html lang="en"><head><title>bar example</title><script src="d3.min.js"></script></head><body><div id="barchart"></div><script…

【0基础学爬虫】爬虫基础之scrapy的使用

【0基础学爬虫】爬虫基础之scrapy的使用大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速…

springboot使用itextpdf+jfreechart制作PDF文档

1. springboot引入的依赖组件 项目中需要引入itextpdf和jfreechart两个组件,版本根据项目所需进行引入,maven组件版本查询可根据如下地址进行查询:maven组件查询<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId&g…