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;
}

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

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

相关文章

Leedcode题目:移除链表元素

题目&#xff1a; 这个题目就是要我们将我们的链表中的值是val的节点删除。 我们题目提供的接口是 传入了指向一个链表的第一个节点的指针&#xff0c;和我们要删除的元素的值val&#xff0c;不只要删除第一个&#xff0c; 思路 我们这里可以创建一个新的链表&#xff0c;…

第四百九十九回

文章目录 1. 概念介绍2. 使用方法2.1 固定样式2.2 自定义样式 3. 示例代码4. 内容总结 我们在上一章回中介绍了"GetMaterialApp组件"相关的内容&#xff0c;本章回中将介绍使用get显示SnackBar.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在介…

基于Vue3与ElementUI Plus的酷企秀场景可视化DIY设计器探索(更新版)

一、引言 在当今数字化快速发展的时代&#xff0c;企业对于展示自身形象、产品细节以及提升客户体验的需求日益增强。酷企秀场景可视化DIY设计器&#xff0c;以其强大的功能和灵活的定制性&#xff0c;为企业提供了从VR全景展示到地图可视化、电子画册制作等一系列数字化解决方…

实现树莓派DS18B20读取温度(OneWire)

简介 使用的是树莓派3B, Go编程实现OneWire方式读取DS18B20温度。 接线 DS18B20 包含经典三线&#xff0c; VCC和GND自不必说&#xff0c; 主要的是DQ线&#xff0c; 需要接4.7K的上拉电阻&#xff0c; 即4.7K欧姆的电阻接到DQ和VCC&#xff0c; 否则树莓派识别不到DS18B20&am…

Coursera吴恩达深度学习专项课程01: Neural Networks and Deep Learning 学习笔记 Week 04 (完结)

Neural Networks and Deep Learning Course Certificate 本文是学习 https://www.coursera.org/learn/neural-networks-deep-learning 这门课的笔记 Course Intro 文章目录 Neural Networks and Deep LearningWeek 04: Deep Neural NetworksLearning Objectives Deep L-layer…

1分钟搞定Pandas DataFrame创建与索引

1.DataFrame介绍 DataFrame 是一个【表格型】的数据结构,可以看作是【由Series组成的字典】(共用同一个索引)。DataFrame 由按一定顺序排列的多列数据组成。设计初衷是将 Series 的使用场景从一维扩展到多维。DataFrame 既有行索引,也有列索引。 行索引:index 列索引:co…

Cloud Translation 价格

Cloud Translation 价格 您需要按月为 Cloud Translation 处理的内容量付费。您需要支付的具体费用取决于您使用的 API 方法和翻译模型。所列价格以美元 (USD) 为单位。 如果您使用非美元货币付费&#xff0c;请参阅 Cloud Platform SKU 上以您的币种列出的价格。 如需详细了解…

论文阅读_RAG融合现有知识树_T-RAG

英文名称: T-RAG: LESSONS FROM THE LLM TRENCHES 中文名称: T-RAG&#xff1a;来自LLM战壕的经验教训 链接: https://arxiv.org/abs/2402.07483 作者: Masoomali Fatehkia, Ji Kim Lucas, Sanjay Chawla 机构: 卡塔尔计算研究所, 哈马德本哈利法大学 日期: 2024-02-12 引用次数…

最新版Ceph( Reef版本)文件存储简单对接k8s(下集)

假如ceph集群已经创建 1.创建cephfs_pool存储池 ceph osd pool create fs_kube_data 16 162.创建cephfs_metadata存储池 ceph osd pool create fs_kube_metadata 16 163 创建cephfs ceph fs new cephfs01 fs_kube_metadata fs_kube_data4 设置最大活动数 ceph fs set cephfs01…

程序员代码面试指南题目解析(一)

题目一&#xff1a;如何仅用递归函数和栈操作逆序一个栈 题目要求&#xff1a; 一个栈依次压入 1、2、3、4、5&#xff0c;那么从栈顶到栈底分别为5、4、3、2、1。将这个栈 转置后&#xff0c;从栈顶到栈底为 1、2、3、4、5&#xff0c;也就是实现栈中元素的逆序&#xff0c;但…

移动硬盘加了PD充电口给设备供电:未来存储与供电的完美结合

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 一、引言 随着科技的飞速发展&#xff0c;电子设备在人们的日常生活中扮演着越来越重要的角色。与此同时&#xff0c;设备间的互联互通和供电方式的便捷性也成为了用户关注的焦点。移动硬盘&#xff0c;作…

docker的centos容器使用yum报错

错误描述 学习docker过程中&#xff0c;基于 centos 镜像自定义新的镜像。拉取一个Centos镜像&#xff0c;并运行容器&#xff0c;容器安装vim&#xff0c;报错了。 报错&#xff1a;Error: Failed to download metadata for repo appstream: Cannot prepare internal mirror…

【数组算法】598. 区间加法

给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] [ai, bi] 意味着当所有的 0 < x < ai 和 0 < y < bi 时&#xff0c; M[x][y] 应该加 1。 在 执行完所有操作后 &#xff0c;计算并返回 矩阵中最大整数的个数 。 示例 1: …

已经安装tensorflow,仍报错No module named ‘tensorflow‘

在安装某些python虚拟环境的教程文章中&#xff0c;经常看到有评论区说安装了但是调用显示无模块&#xff0c;例如pytorch和tensorflow等等。 其实跟之前我写过的一篇文章解决方法类似&#xff0c;就是python项目中需要应用哪个虚拟环境&#xff0c;这个项目的python解释器就选…

C语言----斐波那契数列

各位看官们好&#xff0c;当我写了上一篇博客杨辉三角后&#xff0c;有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)f(n-2)f(n-1)。就是当前是前两项之和&#xff0c;然后下标1和0都是1.从第三项开始计算的。那么我们知道规律&#xff0…

1.分布式-理论

目录 一、什么是分布式系统 二、CAP理论 1.一致性Consisency 2.可用性(Availability) 3.分区容错性(Partition tolrance) 三、BASE理论 1.Basically Available(基本可用) 2.Soft state&#xff08;软状态&#xff09; 3.Eventually consistent&#xff08;最终一致性&a…

QueryPerformanceCounter实现高精度uS(微妙)延时

参考连接 C# 利用Kernel32的QueryPerformanceCounter封装的 高精度定时器Timer_kernel32.dll queryperformancecounter-CSDN博客https://blog.csdn.net/wuyuander/article/details/111831973 特此记录 anlog 2024年5月11日

matlab的imclose()详解

J imclose(I,SE) J imclose(I,nhood) 说明 J imclose(I,SE) 使用结构元素 SE 对灰度或二值图像 I 执行形态学闭运算。形态学闭运算是先膨胀后腐蚀&#xff0c;这两种运算使用相同的结构元素。 J imclose(I,nhood) 对图像 I 执行闭运算&#xff0c;其中 nhood 是由指定结…

虚表,虚函数习题

6. 关于虚表说法正确的是&#xff08;d &#xff09; A&#xff1a;一个类只能有一张虚表 多重继承 B&#xff1a;基类中有虚函数&#xff0c;如果子类中没有重写基类的虚函数&#xff0c;此时子类与基类共用同一张虚表 即使子类重写了基类的虚函数&#xff0c;此时子类与…

Linux下安装mysql8.0(以rpm包安装)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; Linux下安装mysql8.0&#xff08;以rpm包安装&#xff09;https://myweb.myskillstree.cn/125.html 目录 1、查操作系统信息 2、下载mysql 8.0.34的rpm包 …