Codeforces Round 605 (Div. 3) A~D

本人水平不高,开这个专栏主要是督促自己补题,有些题对目前的我来说还比较难,还补不动,等以后能力上来了再补。。。

原题链接:Dashboard - Codeforces Round 605 (Div. 3) - Codeforces

目录

A. Three Friends

B. Snow Walking Robot

C. Yet Another Broken Keyboard

D. Remove One Element


A. Three Friends

让三个人尽可能接近,让左边的人和右边的人尽量往中间靠,a与b的距离| a-b |会减1,b与c的距离| b-c |也会 减1,而a与c的距离| a-c |会 减2。但是又因为是三个绝对值的式子相加,所以这三个式子之和必然大于等于0,取max(0ll,abs(a-b)+abs(b-c)+abs(a-c)-4) 即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'void solve() {int a, b, c; cin >> a >> b >> c;cout << max(0ll, abs(a - b) + abs(b - c) + abs(a - c) - 4) << endl;
}signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int T; cin >> T;while (T--) {solve();}return 0;
}

B. Snow Walking Robot

让机器人走一个(先向左再向上再向右再向下的)L—>U—>R—>D的矩形即可。

选择矩形的原因是“凹”形(下图左半部分)相比于与其效果相同的矩形,浪费了两个AB的长度。而“凸”形(下图右半部分)等价于虚线的矩形,而矩形比“凸”形简单,所以选择矩形。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'void solve() {string s; cin >> s;int l=0, r=0, u=0, d = 0;for (auto i : s) {if (i == 'L') l++;else if (i == 'R') r++;else if (i == 'U') u++;else if (i == 'D') d++;}int x = min(l, r), y = min(u, d);if (x && y) {cout << 2 * x + 2 * y << endl;for (int i = 1; i <= x; i++) cout << 'L';for (int i = 1; i <= y; i++) cout << 'U';for (int i = 1; i <= x; i++) cout << 'R';for (int i = 1; i <= y; i++) cout << 'D';}else if (x) {cout << 2 << endl << "LR";}else if (y) {cout << 2 << endl << "UD";}else if (x == 0 && y == 0) {cout << 0 << endl;}cout << endl;
}signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int T; cin >> T;while (T--) {solve();}return 0;
}

C. Yet Another Broken Keyboard

写法一:

开一个标记数组f[26]表示从'a'~'z’的字母是否是好的,如果是好的标记为1,否则为0。

遍历字符串s,开一个计数的变量cnt,初始化为0。当遇到好的字母(也就是f[s[i]-'a']为1),让cnt++。否则让ans+=cnt*(cnt+1)/2,并重新让cnt=0。因为末尾的那段不会在循环中被累加,所以在循环外我们还需要让ans再累加一次cnt*(cnt+1))/2 。

写法二:

可以用set代替标记数组。一开始将好的字母都存到set,后面使用set的s.find()函数(s.find() !=s.end() )来判断字符串中的字母是否是好的。

写法一代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
int f[26];signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n, k; cin >> n >> k;string s; cin >> s;while (k--) {char c; cin >> c;f[c - 'a' ] = 1;}int cnt = 0, ans = 0;;for (int i = 0; i < n; i++) {if (f[s[i]-'a']) {cnt++;}else {ans += cnt * (cnt + 1) / 2;cnt = 0;}}ans += cnt * (cnt + 1) / 2;cout << ans << endl;return 0;
}

写法二代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
set<char> a;signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n, k; cin >> n >> k;string s; cin >> s;while (k--) {char c; cin >> c;a.insert(c);}int cnt = 0, ans = 0;;for (int i = 0; i < n; i++) {if (a.find(s[i]) != a.end()) {cnt++;}else {ans += cnt * (cnt + 1) / 2;cnt = 0;}}ans += cnt * (cnt + 1) / 2;cout << ans << endl;return 0;
}

D. Remove One Element

既然是求最长上升子序列,那必然是dp。由题意知,可以删除一个或者不删除。

1. 如果不删除,就是最长连续上升子段:

for(int i = 1;i <= n;i++) {

        if(a[i] > a[i - 1]) dp1[i] = dp1[i - 1] + 1;

        else dp1[i] = 1;

}

 for(int i = n;i >= 1;i--){

        if(a[i] < a[i + 1]) dp2[i] = dp2[i + 1] + 1;
        else dp2[i] = 1;

}

2. 如果要删除,我们就枚举要删除的数:

枚举下标i,如果删除掉 i 时,剩下的能连续(a[i-1]<a[i+1]),我们就可以将以a[i-1]为结尾最长连续上升子段和以a[i+1]为开头最长连续上升子段连接起来,长度为dp1[i-1] + dp2[i+1]。

注意事项:

1. 要求的是最长连续上升子段,而不是最长连续不下降子段(也就是1 1 1 1 这个最长子段长度为1)

2. 也可以不用删除数。(1 2 3 4 这个最长子段长度为4)

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 2e5 + 10;
int a[N], dp1[N], dp2[N], ans;signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n; cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];for (int i = 1; i <= n; i++) {if (a[i] > a[i - 1]) dp1[i] = dp1[i - 1] + 1;else dp1[i] = 1;}for (int i = n; i >= 1; i--) {if (a[i] < a[i + 1]) dp2[i] = dp2[i + 1] + 1;else dp2[i] = 1;}for (int i = 1; i <= n; i++) {if (a[i - 1] < a[i + 1]) ans = max(ans, dp1[i - 1] + dp2[i + 1]);else ans = max({ ans,dp1[i],dp2[i] });}cout << ans << endl;return 0;
}

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

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

相关文章

【Linux:lesson1】的基本指令

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f697;打开Xshell&#xff0c;登陆root…

初识java--javaSE(3)--方法,递归,数组,

文章目录 一 方法的使用1.1 什么是方法&#xff1f;main方法注意事项 1.2 方法的调用嵌套调用在方法调用时形参与实参的关系&#xff1a; 1.3 方法的重载方法重载的意义&#xff1f;总结方法重载&#xff1a;方法签名&#xff1a; 二 递归什么是递归&#xff1f;递归的精髓&…

蛋糕店做配送小程序的作用是什么

蛋糕烘焙除了生日需要&#xff0c;对喜吃之人来说往往复购率较高&#xff0c;除线下实体店经营外&#xff0c;更多的商家选择线上多种方式获客转化、持续提高生意营收&#xff0c;而除了进驻第三方平台外&#xff0c;构建品牌私域自营店铺也同样重要。 运用【雨科】平台搭建蛋…

ABAP跨client的RFC调用

1、SM59配置连接 2、创建需要调用的函数&#xff0c;ZGET_TM_LIST&#xff0c;开启远程启用模块 3、新建调用程序 DATA:L_MSG TYPE C,LSH(30) TYPE C. DATA:IT_ZSTM_LIST TYPE STANDARD TABLE OF ZSTM_LIST WITH HEADER LINE.CALL FUNCTION ZGET_TM_LIST DESTINATION ZTEST_R…

【回溯 网格 状态压缩】52. N 皇后 II

本文涉及知识点 回溯 网格 状态压缩 LeetCode52. N 皇后 II n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#x…

python3如何安装bs4

在python官网找到beautifulsoup模块的下载页面&#xff0c;点击"downloap"将该模块的安装包下载到本地。 将该安装包解压&#xff0c;然后在打开cmd&#xff0c;并通过cmd进入到该安装包解压后的文件夹目录下。 在该文件目录下输入"python install setup.py&quo…

信息系统架构模型_3.企业数据交换总线

1.企业数据交换总线 实践中&#xff0c;还有一种较常用的架构&#xff0c;即企业数据交换总线&#xff0c;即不同的企业应用之间进行信息交换的公共通道&#xff0c;如图1所示。 图1 企业数据交换总线架构 这种架构在大型企业不同应用系统进行信息交换时使用较普遍&am…

前端笔记-day05

文章目录 01-结构伪类选择器02-结构伪类选择器-公式用法03-伪元素选择器04-盒子模型-组成05-盒子模型-边框线06-盒子模型-单方向边框线07-盒子模型-内边距08-盒子模型-padding多值写法09-盒子模型-尺寸计算10-盒子模型-版心居中11-清除默认样式12-元素溢出overflow13-外边距合并…

嵌入式基础课程配套电机FOC伺服电机开发板AT32F403磁编码IMU姿态

嵌入式基础课程配套电机FOC伺服电机开发板AT32F403磁编码IMU姿态 带你入门嵌入式有二十多年开发经验的老技骨做技术支持整个开发包硬件包括电机2205&#xff0c;支持12V到24V宽输入&#xff0c;配套12V2A电源。包装原理图和PCB嵌入式软件嵌入式基础课程 带你入门嵌入式 电机FO…

即插即用篇 | YOLOv8引入局部自注意力 HaloAttention | 为参数高效的视觉主干网络扩展局部自注意力

本改进已集成到 YOLOv8-Magic 框架。 我们提出了Axial Transformers,这是一个基于自注意力的自回归模型,用于图像和其他组织为高维张量的数据。现有的自回归模型要么因高维数据的计算资源需求过大而受到限制,要么为了减少资源需求而在分布表达性或实现的便捷性上做出妥协。相…

嵌入式C语言高级教程:实现基于STM32的无人机飞控系统

无人机飞控系统是无人机的大脑&#xff0c;负责处理来自各种传感器的数据并控制无人机的飞行。本教程将指导如何在STM32微控制器上实现一个基础的无人机飞控系统。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32F405RGT6&#xff0c;因其高性能和大量的输入输出接口…

机器学习算法应用——K近邻分类器(KNN)

K近邻分类器&#xff08;KNN&#xff09;&#xff08;4-2&#xff09; K近邻分类器&#xff08;K-Nearest Neighbor&#xff0c;简称KNN&#xff09;是一种基本的机器学习分类算法。它的工作原理是&#xff1a;在特征空间中&#xff0c;如果一个样本在特征空间中的K个最相邻的样…

交通数据三维可视化呈现与可视化分析系统开发(附程序源码)

目录 01 系统介绍 02 功能介绍 文件管理功能 模型研究 可视化分析功能 今天分享一套“交通数据三维可视化呈现与可视化分析系统”&#xff0c;并开放程序源代码下载&#xff0c;内容涉及开源空间数据库的使用、三维引擎的二次开发、矢量和栅格数据管理、交通流量分析模型框…

【18-Ⅱ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础&#xff0c;通过阅读Java廖雪峰网站&#xff0c;简单速成了java&#xff0c;但对其中一些入门概念有所疏漏&#xff0c;阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

Qt | QSpinBox 类 QDoubleSpinBox 类(微调框)

01、QSpinBox 类 1、QSpinBox类是 QAbstractSpinBox 类的直接子类和具体实现, 2、QSpinBox 类被设计用于处理整数和离散值集合,对于浮点值使用 QDoubleSpinBox 类实现。 3、QSpinBox 默认只支持整数值,但可通过其内部的成员函数进行扩展,以支持使用不同的 字符串。 02…

ROS2 工作空间

文章目录 ROS2 工作空间创建工作空间自动安装依赖编译工作空间设置环境变量参考链接 ROS2 工作空间 工作空间可以简单理解为工程目录。 ROS 系统中一个典型的工作空间结构如图所示&#xff1a; dev_ws&#xff1a; 根目录&#xff0c;里面会有四个子目录&#xff08;子空间&a…

视频资源汇聚平台常见的几种接入方式

视频资源汇聚平台 视频汇聚平台可以实现海量资源的接入、汇聚、存储、处理、分析、运维等&#xff0c;平台具备轻量化接入能力&#xff0c;可支持多协议方式接入&#xff0c;包括主流标准协议GB28181、RTSP、ONVIF、RTMP、FLV、WEBSOCKET等&#xff0c;以及厂家私有协议与SDK接…

信息系统架构模型_2.面向服务架构(SOA)模式

前面讲的客户机/服务器模式&#xff0c;无论多少层的C/S软件结构&#xff0c;对外来讲&#xff0c;都只是一个单结点应用&#xff08;无论它由多个不同层的“服务”相互配合来完成其功能&#xff09;&#xff0c;具体表现为一个门户网站、一个应用系统等。而多个单点应用相互通…

最新ChatGPT中文系统网站源码+系统部署+支持AI对话、AI绘画、AI音乐等大模型

一、系统介绍 本文将介绍最新的ChatGPT中文版AI创作系统——星河易创AI系统&#xff0c;该系统基于ChatGPT的核心技术&#xff0c;融合了自然语言问答、绘画、音乐等创作功能&#xff0c;并兼容官方GPT全模型。该系统提供多样化的应用&#xff0c;包括GPTs的多场景应用、实时G…

C++错题集(持续更新ing)

Day 1 一、选择题 解析&#xff1a; 在数字不会溢出的前提下&#xff0c;对于正数和负数&#xff0c;有&#xff1a; 1&#xff09;左移n位&#xff0c;相当于操作数乘以2的n次方&#xff1b; 2&#xff09;右移n位&#xff0c;相当于操作数除以2的n次方。 解析&#xff1a…