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端口状态含义(未完

前言 在面试或者企业实战中常见的命令 那就是查询端口命令是哪个 1. 前沿知识 查询端口命令&#xff1a;lsof -i 查询端口的状态&#xff1a;netstat 命令参数说明-tTCP端口-uUDP端口-p进程表示符和程序名称-n显示IP 常用的netstat结合grep进行精准查询 添加链接描述 添…

C# 快速把List<string>集合转换成一个字符串

在C#中&#xff0c;要将List<string>类型的集合转换成一个单一的字符串&#xff0c;其中各元素由特定的分隔符连接&#xff0c;通常推荐使用String.Join()方法。 简单的示例&#xff1a; 使用for循环 代码如下&#xff1a; using System; using System.Collections.G…

【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…

C# 判断Access数据库中表是否存在,表中某个字段是否存在

在C#中判断Access数据库中某个表是否存在以及该表中某个字段是否存在&#xff0c;可以通过以下步骤实现&#xff1a; 判断表是否存在 可以使用ADO.NET中的OleDbConnection.GetOleDbSchemaTable方法来获取数据库的架构信息&#xff0c;并检查特定的表是否存在。 using System…

【回溯 网格 状态压缩】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-外边距合并…

uniapp解决后端传来的id太长导致精度丢失(超过16位的数字会变成0000)的问题

办法一&#xff1a;让后端把id传成字符串类型&#xff1b; 办法二&#xff1a;用jsonBig转换为bigInt数字类型&#xff1a; 1.在项目根目录打开命令行输入命令安装jsonBig插件&#xff1a; npm install json-bigint1.0.02.在封装的请求中使用插件&#xff0c;核心是在uni.re…

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

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

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

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

[力扣题解]51. N皇后

题目&#xff1a;51. N皇后 思路 回溯法 代码 class Solution { public:vector<vector<string>> result;bool right(int row, int col, int n, vector<string>& board){int i, j;// 不能同行, 这里我又没有写错&#xff0c;为什么结果不对呢&#xf…

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

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

C语言中的控制语句:深入解析与案例实践上

在C语言中&#xff0c;控制语句是编程的核心&#xff0c;它们允许我们根据条件或循环的逻辑来决定代码的执行流程。本文将详细探讨C语言中的几种主要控制语句&#xff0c;并通过案例代码来展示其实际应用。 一、条件语句 条件语句根据给定的条件来决定执行哪段代码。C语言中最常…

机器学习算法应用——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;内容涉及开源空间数据库的使用、三维引擎的二次开发、矢量和栅格数据管理、交通流量分析模型框…

麒麟系统+飞腾处理器 qt5.9.0 编译安装教程

手动编译QT5.9.0 麒麟系统编译qt参考 麒麟系统编译qt ./configure -qt-xcb -prefix /usr/local -release -opensource -platform linux-g -make libs -optimized-qmake -pch -qt-libjpeg -qt-zlib -no-openssl -no-opengl -skip qt3d -skip qtcanvas3d -skip qtpurchasing -no…