Codeforces Round 910 (Div. 2) --- B-E 补题记录

B - Milena and Admirer 

Problem - B - Codeforces

题目大意:

现在给出一个无序序列,你可以使用任意次操作将这个无序序列修改为不递减序列,操作为你可以使用两个数a和b来替换ai,序列就变为了 ai-1, a,b,ai+1。求将这个序列修改为不递减序列的最少操作次数。

我比赛时的错误思路:(标红的是正确的)

对这个序列进行修改操作时,应该从后往前进行修改,因为他是不递减序列,所以我们只要保证后面满足条件,然后一直向前调整即可。(这个思路是对的)但是我刚开始想的是要让操作次数较少,应该要尽量2分这个不合理的数,让其变为合理的。所以如果是9,3。我的这个操作就会修改为2,2,2,3,3进行3次修改操作。然后我突然发现3,3,3,3.只会进行两次修改操作。所以思路应该为均分这个不合理的数。让他均分后小于他后面的数,均分还能保证他对前面的限制条件放松,来使操作次数进一步减小。

代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.HashMap;/*** @ProjectName: study3* @FileName: Ex15* @author:HWJ* @Data: 2023/11/19 23:05*/
public class Ex15 {static int[] arr;static long total = 0;static HashMap<Integer, Integer> map = new HashMap<>();public static void main(String[] args) throws IOException {StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));in.nextToken(); int n = (int) in.nval;for (int o = 0; o < n; o++) {total = 0;in.nextToken();int m = (int) in.nval;arr = new int[m];for (int i = 0; i < m; i++) {in.nextToken();arr[i] = (int) in.nval;}for (int i = m - 2; i >= 0; i--) {if (arr[i] > arr[i + 1]) {// 尽量arr[i]均分为arr[i+1]的大小。int cnt = (arr[i] + arr[i + 1] - 1) / arr[i + 1];total += cnt - 1; // 均分为cnt份,需要cnt-1次。arr[i] /= cnt;}}System.out.println(total);}}
}

Colorful Grid

Problem - C - Codeforces

题目大意:

现在给出一个方格n行m列,你可以将这个方格的任意一条边修改为红色或者蓝色,然后需要从(1,1)这个点前往到(n,m)这个点,要求在前往路程中走完蓝色的边下一次走的边应该为红色的边,走完红色的边下一次走的边应该为蓝色。然后在满足这个要求的情况下,如果经过了k条边,我们则称这次的路程长度为k。(边可以重复经过)现在给出n m k。问你有没有一个染色方案,可以使从起点到终点的路径长度为k。

思路:

对于一个方格,他的最短路径应该为(n+m-2),然后我们如果要判断k这个路程长度能不能到达,那可以想到,我们应该走多组无效路程,然后一组无效路程应该长度为2。所以k应该和(n+m-2)保持同样的奇偶性。所以他最后可能是多走了奇数组或者偶数组。那么最后就相当于多走一组(奇数组)或者没有多走(偶数组),所以我们可以构造一个正方形让他在浪费一组和不浪费的情况下都能前往终点。(这里给出代码,可以根据代码画图帮组理解)

代码:

import java.util.HashMap;
import java.util.Objects;
import java.util.Scanner;/*** @ProjectName: study3* @FileName: Ex16* @author:HWJ* @Data: 2023/11/20 12:28*/
public class Ex16 {static HashMap<Edge, Character> map = new HashMap<>();public static void main(String[] args) {Scanner input = new Scanner(System.in);int t = input.nextInt();for (int o = 0; o < t; o++) {int n = input.nextInt();int m = input.nextInt();int k = input.nextInt();int mn = n + m - 2; // 所需要使用的最少边数// 因为k如果大于最少边数,他就只能一直重复走某些路径 但重复的时候肯定会重复多组边// 一组边会增加两次,所以k应该和最少边数保持同样的奇偶性if (k < mn || (k % 2) != (mn % 2)){System.out.println("No");}else {System.out.println("Yes");for (int i = 1; i <= n; i++) { // 这里将整个图的边全部染为红色for (int j = 1; j <= m; j++) {if (j + 1 <= m) map.put(new Edge(new Node(i,j), new Node(i,j+1)), 'R');if (i + 1 <= n) map.put(new Edge(new Node(i,j), new Node(i+1,j)), 'R');}}map.put(new Edge(new Node(1,1), new Node(2,1)), 'B');map.put(new Edge(new Node(1,2), new Node(2,2)), 'B');map.put(new Edge(new Node(1,3), new Node(2,3)), 'B');map.put(new Edge(new Node(2,2), new Node(3,2)), 'B');// 构造一个正方行的红蓝圈让他一直在里面绕,并且可以在某个半圈或者一圈使退出正方形圈boolean f = false;// 这里构造使任意一个退出的地方都一定能走到终点。for (int i = 3; i < m; i++) {map.put(new Edge(new Node(3,i), new Node(3,i+1)), f ? 'R' : 'B');f = !f;}for (int i = 3; i < n; i++) {map.put(new Edge(new Node(i,m), new Node(i+1,m)), f ? 'R' : 'B');f = !f;}for (int i = 1; i <= n; i++) {for (int j = 1; j < m; j++) {System.out.print(map.get(new Edge(new Node(i,j),new Node(i,j+1))) + " ");}System.out.println();}for (int i = 1; i < n; i++) {for (int j = 1; j <= m; j++) {System.out.print(map.get(new Edge(new Node(i,j),new Node(i+1,j))) + " ");}System.out.println();}}}}public static class Edge{Node s;Node e;public Edge(Node s, Node e){this.s = s;this.e = e;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Edge edge = (Edge) o;return Objects.equals(s, edge.s) && Objects.equals(e, edge.e);}@Overridepublic int hashCode() {return Objects.hash(s, e);}}public static class Node{int col;int row;public Node(int row, int col){this.col = col;this.row = row;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Node node = (Node) o;return col == node.col && row == node.row;}@Overridepublic int hashCode() {return Objects.hash(col, row);}}
}

D. Absolute Beauty 

Problem - D - Codeforces

题目大意:

给出两个整数序列,a和b。得分为|ai - bi|之和。现在你可以进行至多一次操作使得得分最大。操作为选择任意bi 和 bj让其交换位置。

思路:

对于a序列和b序列,因为得分是计算绝对值且最多只能交换一次,所以ai和bi互换位置,是对答案没有影响。则我们可以通过互换位置,使得任意i位置上的ai一定大于等于bi。

这可以将绝对值表示的意义想象为这个线段的长度。

对于任意几个线段有三个情况。只有第一种情况的交换会使,绝对值之和增加。又因为只能进行一次交换操作,所以我们应该使第一种情况下的a1尽可能小,b2尽可能大。

则答案增量为2*(max(b)- min(a) )

代码:

import java.util.Scanner;/*** @ProjectName: study3* @FileName: Ex17* @author:HWJ* @Data: 2023/11/21 9:29*/
public class Ex17 {public static void main(String[] args) {Scanner input = new Scanner(System.in);int t = input.nextInt();for (int o = 0; o < t; o++) {int n = input.nextInt();int[][] a = new int[n][2];long total = 0;int max = 0;int min = Integer.MAX_VALUE;for (int i = 0; i < n; i++) {a[i][0] = input.nextInt();}for (int i = 0; i < n; i++) {a[i][1] = input.nextInt();if (a[i][1] > a[i][0]){int tmp = a[i][1];a[i][1] = a[i][0];a[i][0]=tmp;}max = Math.max(max, a[i][1]);min = Math.min(min, a[i][0]);total += a[i][0] - a[i][1];}System.out.println(Math.max(total, total + 2L *(max - min)));}}
}

 E. Sofia and Strings

Problem - E - Codeforces

题目大意:

给你两个字符串S和T,数字n和m,n和m分别为字符串S和T的长度,你可以对字符串S进行操作使其变为字符串T。如果能变为字符串T则输出YES,否则输出NO。

操作为:

1. 选择 i(1 <= i <= n),将字符串S这个位置上的字符删掉。

2. 选择 l 和 r ( 1 <= l <= r <= n),将字符串S [ l,r] 这段位置上的字符按照字典序进行排序。

思路:

因为他是按照字典序进行排序,那么字典序小的字符没有办法修改到字典序大的字符后面。

则给出一个样例:

S : abcdgef

T : efg

遍历T,T1为e,可以找到它在S的位置为S5,S5前面的abcd已经对后序的整个操作是无效的了。

所以修改S T为

S :gf

T:fg

遍历T,T1为f,可以找到它在S的位置为S2,S2前面的g对后序的操作是有效的,保留。

所以修改S T为

S :g

T:g

.........这样的修改策略就可以判断S是否能修改为T。但是如果用遍历来寻找对应位置和是否删除是不明智的,因为时间开销太大了。所以我们可以使用队列来实现。因为删除时,只删除对应位置和对应位置前面字典序小于当前字典序的字符。满足先进先出的特性,位置靠前的先进行删除操作。

代码:

import java.util.LinkedList;
import java.util.Scanner;/*** @ProjectName: study3* @FileName: Ex18* @author:HWJ* @Data: 2023/11/21 12:01*/
public class Ex18 {public static void main(String[] args) {Scanner input = new Scanner(System.in);int t = input.nextInt();for (int o = 0; o < t; o++) {int n = input.nextInt();int m = input.nextInt();String str1 = input.next();String str2 = input.next();char[] s1 = str1.toCharArray();char[] s2 = str2.toCharArray();LinkedList<Integer>[] set = new LinkedList[27];for (int i = 0; i < 27; i++) {set[i] = new LinkedList<>();}for (int i = 0; i < n; i++) {set[s1[i] - 'a'].add(i);}boolean loop = true;for (int i = 0; i < m; i++) {if (set[s2[i] - 'a'].isEmpty()){loop = false;break;}int now = set[s2[i] - 'a'].removeFirst();for (int j = 0; j < s2[i] - 'a'; j++) {while (!set[j].isEmpty() && set[j].getFirst() < now){set[j].removeFirst();}}}System.out.println(loop ? "YES" : "NO");}}
}

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

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

相关文章

【C++ Primer Plus学习记录】for循环

很多情况下都需要程序执行重复的任务&#xff0c;C中的for循环可以轻松地完成这种任务。 我们来从程序清单5.1了解for循环所做的工作&#xff0c;然后讨论它是如何工作的。 //forloop.cpp #if 1 #include<iostream> using namespace std;int main() {int i;for (i 0; …

Ubuntu文件系统损坏:The root filesystem on /dev/sda5 requires a manual fsck

前言 Ubuntu在启动过程中&#xff0c;经常会遇到一些开故障&#xff0c;导致设备无法正常开机&#xff0c;例如文件系统损坏等。 故障描述 Ubuntu系统启动过程中&#xff0c;出现以下文件系统损坏错误&#xff1a; 产生原因 该故障是由磁盘检测不能通过导致&#xff0c;可能是因…

代码随想录 11.21 || 单调栈 LeetCode 84.柱状图中最大的矩形

84.柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1。求在柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。和 42.接雨水 类似&#xff0c;在由数组组成的柱状图中&#xff0c;根据条件求解。 图…

NLP:使用 SciKit Learn 的文本矢量化方法

一、说明 本文是使用所有 SciKit Learns 预处理方法生成文本数字表示的深入解释和教程。对于以下每个矢量化器&#xff0c;将给出一个简短的定义和实际示例&#xff1a;one-hot、count、dict、TfIdf 和哈希矢量化器。 SciKit Learn 是一个用于机器学习项目的广泛库&#xff0c;…

官宣!Sam Altman加入微软,OpenAI临时CEO曝光,回顾董事会‘’政变‘’始末

11月20日下午&#xff0c;微软首席执行官Satya Nadella在社交平台宣布&#xff0c;“微软仍然致力于与 OpenAI的合作伙伴关系。同时欢迎Sam Altman 和 Greg Brockman 及其团队加入微软&#xff0c;领导一个全新的AI研究团队”。 Sam第一时间对这个消息进行了确认。 此外&…

Dart笔记:glob 文件系统遍历

Dart笔记 文件系统遍历工具&#xff1a;glob 模块 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/13442…

2023 羊城杯 final

前言 笔者并未参加此次比赛, 仅仅做刷题记录. 题目难度中等偏下吧, 看你记不记得一些利用手法了. arrary_index_bank 考点: 数组越界 保护: 除了 Canary, 其他保护全开, 题目给了后门 漏洞点: idx/one 为 int64, 是带符号数, 所以这里存在向上越界, 并且 buf 为局部变量,…

ROS1余ROS2共存的一键安装(全)

ROS1的安装&#xff1a; ROS的一键安装&#xff08;全&#xff09;_ros一键安装_牙刷与鞋垫的博客-CSDN博客 ROS2的安装 在开始这一部分的ROS2安装之前&#xff0c;是可以安装ROS1的&#xff0c;当然如果你只需要安装ROS2的话就执行从此处开始的代码即可 我是ubuntu20.4的版…

电力感知边缘计算网关产品设计方案-业务流程设计

1.工业数据通信流程 工业数据是由仪器仪表、PLC、DCS等工业生产加工设备提供的,通过以太网连接工业边缘计算网关实现实时数据采集。按照现有的通信组网方案,在理想通信状态下可以保证有效获取工业数据的真实性和有效性。 边缘计算数据通信框架图: 2.边缘计算数据处理方案 …

Linux驱动开发——块设备驱动

目录 一、 学习目标 二、 磁盘结构 三、块设备内核组件 四、块设备驱动核心数据结构和函数 五、块设备驱动实例 六、 习题 一、 学习目标 块设备驱动是 Linux 的第二大类驱动&#xff0c;和前面的字符设备驱动有较大的差异。要想充分理解块设备驱动&#xff0c;需要对系统…

高效开发与设计:提效Spring应用的运行效率和生产力 | 京东云技术团队

引言 现状和背景 Spring框架是广泛使用的Java开发框架之一&#xff0c;它提供了强大的功能和灵活性&#xff0c;但在大型应用中&#xff0c;由于Spring框架的复杂性和依赖关系&#xff0c;应用的启动时间和性能可能会受到影响。这可能导致开发过程中的迟缓和开发效率低下。优…

Golang基础-面向过程篇

文章目录 基本语法变量常量函数import导包匿名导包 指针defer静态数组动态数组(slice)定义方式slice追加元素slice截取 map定义方式map使用方式 基本语法 go语言输出hello world的语法如下 package mainimport ("fmt""time" )func main() {fmt.Println(&…

循环链表2

循环链表的实现 对于数据结构中所有的结构而言&#xff0c;每一次都是用之前初始化&#xff08;处理一开始的随机值&#xff09;一下&#xff0c; 用完销毁&#xff08;不管有没有malloc都能用&#xff0c;用了可以保证没有动态内存泄漏了&#xff09;一下 而在C里面&#x…

Dubbo开发系列

一、概述 以上是 Dubbo 的工作原理图&#xff0c;从抽象架构上分为两层&#xff1a;服务治理抽象控制面 和 Dubbo 数据面 。 服务治理控制面。服务治理控制面不是特指如注册中心类的单个具体组件&#xff0c;而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中…

PLC设备相关常用英文单词(一)

PLC设备相关常用英文单词&#xff08;一&#xff09; Baud rate 波特率Bus 总线Binary 二进制Configuration 组态Consistent data 一致性数据Counter 计数器Cycle time 循环时间Conveyor 传送Device names 设备名称Debug 调试Download 下载Expand 扩展Fix 固定Flow 流量Functio…

【LeetCode:689. 三个无重叠子数组的最大和 | 序列dp+前缀和】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

WMS系统先验后收策略

在制造业工厂的仓库管理中&#xff0c;确保物料的质量和数量是至关重要的。传统的仓库管理方式往往采用“先收后验”策略&#xff0c;即先接收物料&#xff0c;然后再进行质量检验。然而&#xff0c;这种方式存在一定的风险&#xff0c;例如不良品流入、数量不准确等问题。为了…

腾讯云服务器标准型S5实例CPU性能如何?配置特性说明

腾讯云服务器CVM标准型S5实例具有稳定的计算性能&#xff0c;CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽&#xff0c;15个月313.2元、2核4G配置748.2元15个月&#xff0c;CPU内存配置还可以选择4核8G、8核16G等配置&#xff0c;公网带宽可选1M、3M、5M或10M&#xff0c;腾…

优思学院|现代质量管理实践与六西格玛方法论如何融合?

企业要解决质量问题必然需要涉及管理&#xff0c;然而&#xff0c;如果仅仅将六西格玛法视为一种质量管理方法&#xff0c;必定会导致六西格玛管理法的失败。六西格玛法是一种具有特定战略性的管理方法&#xff0c;它涉及到市场、顾客、产品、服务、流程、质量、价值链以及财务…