Codeforces Round 954 (Div.3)

news2024/11/16 13:29:52

传送门

A. X Axis

时间限制:2秒        空间限制:256MB        输入:标准输入        输出:标准输出

问题描述

你有三个位于 X 轴上的整数坐标点 x_1, x_2x_3(其中 1 \le x_i \le 10)。你可以选择 X 轴上任意一个整数坐标点 a。注意,点 a 可以与 x_1, x_2x_3 重合。定义 f(a) 为从给定的点到点 a 的总距离。找出 f(a) 的最小值。

两个点 a 和 b 之间的距离等于 ∣a−b∣。例如,点 a = 5 和 b = 2 之间的距离为 3。

输入格式

每个测试包含多个测试用例。第一行包含一个整数 t(1 \le t \le 10^3),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的一行包含三个整数 x_1, x_2x_31 \le x_i \le 10),表示这些点的坐标。

输出格式

对于每个测试用例,输出 f(a) 的最小值。

样例输入

8\\ 1 \hspace{0.5em} 1 \hspace{0.5em} 1\\ 1 \hspace{0.5em} 5 \hspace{0.5em} 9\\ 8 \hspace{0.5em} 2 \hspace{0.5em} 8\\ 10 \hspace{0.5em} 9 \hspace{0.5em} 3\\ 2 \hspace{0.5em} 1 \hspace{0.5em} 1\\ 2 \hspace{0.5em} 4 \hspace{0.5em} 1\\ 7 \hspace{0.5em} 3 \hspace{0.5em} 5\\ 1 \hspace{0.5em} 9 \hspace{0.5em} 4

样例输出

0\\ 8\\ 6\\ 7\\ 1\\ 3\\ 4\\ 8

注释

在第一个测试用例中,当 a = 1 时,f(a) 的最小值为:f(1) = |1 - 1| + |1 - 1| + |1 - 1| = 0。

在第二个测试用例中,当 a = 5 时,f(a) 的最小值为:f(5) = |1 - 5| + |5 - 5| + |9 - 5| = 8。

在第三个测试用例中,当 a = 8 时,f(a) 的最小值为:f(8) = |8 - 8| + |2 - 8| + |8 - 8| = 6。

在第四个测试用例中,当 a = 9 时,f(a) 的最小值为:f(10) = |10 - 9| + |9 - 9| + |3 - 9| = 7。

思路

数据量非常小,所以从最小的 x_i 开始遍历到最大的 x_i,并找出这中间最小的 f(a) 即可。

代码

#include <bits/stdc++.h>
using namespace std;
inline int read() {
    int x = 0, f = 1; char c = getchar();
    while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
    while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int main () {
    int t = read();
    while (t--) {
        int x1 = read(), x2 = read(), x3 = read(), ans = INT_MAX;
        int minm = min(x1, min(x2, x3)), maxm = max(x1, max(x2, x3));
        for (int i = minm; i <= maxm; i++) {
            ans = min(ans, abs(i - x1) + abs(i - x2) + abs(i - x3));
        }
        printf("%d\n", ans);
    }
    return 0;
}

B. Matrix Stabilization

时间限制:2秒        空间限制:256MB        输入:标准输入        输出:标准输出

问题描述

你有一个大小为 n \times m 的矩阵,其中行从上到下编号为 1 到 n,列从左到右编号为 1 到 m。第 i 行和第 j 列交叉处的元素记为 a_{ij}

考虑如下用于稳定矩阵 a 的算法:

1. 找到一个单元格 (i, j),其值严格大于所有相邻单元格的值。如果没有这样的单元格,终止算法。如果有多个这样的单元格,选择 i 值最小的那个,如果仍有多个单元格,选择 j 值最小的那个。
2. 将 a_{ij} 设置为 a_{ij} - 1
3. 回到第1步。

在这个问题中,如果两个单元格 (a, b)(c, d) 共享一个公共边,则它们被认为是相邻的,即 |a - c| + |b - d| = 1。

你的任务是输出矩阵 a 在算法执行完毕后的状态。可以证明,该算法不能无限次执行。

输入格式

每个测试包含多组输入数据。第一行包含一个整数 t (1 \le t \le 10^4),表示输入数据的组数。接下来是每组输入数据的描述。

每组输入数据的第一行包含两个整数 n 和 m (1 \le n, m \le 100, n \cdot m > 1),表示矩阵 a 的行数和列数。

接下来的 n 行描述了矩阵的对应行。第 i 行包含 m 个整数 a_{i1}, a_{i2}, \ldots, a_{im} (1 \le a_{ij} \le 10^9)。

保证所有输入数据组的 n \cdot m 之和不超过 2 \cdot 10^5

输出格式

对于每组输入数据,输出 n 行,每行包含 m 个数字,表示在稳定算法执行后的矩阵 a 的各个单元格的值。

样例输入

6\\ 1 \hspace{0.5em} 2\\ 3 \hspace{0.5em} 1\\ 2 \hspace{0.5em} 1\\ 1\\ 1\\ 2 \hspace{0.5em} 2\\ 1 \hspace{0.5em} 2\\ 3 \hspace{0.5em} 4\\ 2 \hspace{0.5em} 3\\ 7 \hspace{0.5em} 4 \hspace{0.5em} 5\\ 1 \hspace{0.5em} 8 \hspace{0.5em} 10\\ 5 \hspace{0.5em} 4\\ 92 \hspace{0.5em} 74 \hspace{0.5em} 31 \hspace{0.5em} 74\\ 74 \hspace{0.5em} 92 \hspace{0.5em} 17 \hspace{0.5em} 7\\ 31 \hspace{0.5em} 17 \hspace{0.5em} 92 \hspace{0.5em} 3\\ 74 \hspace{0.5em} 7 \hspace{0.5em} 3 \hspace{0.5em} 92\\ 7 \hspace{0.5em} 31 \hspace{0.5em} 1 \hspace{0.5em} 1\\ 3 \hspace{0.5em} 3\\ 1000000000 \hspace{0.5em} 1 \hspace{0.5em} 1000000000\\ 1 \hspace{0.5em} 1000000000 \hspace{0.5em} 1\\ 1000000000 \hspace{0.5em} 1 \hspace{0.5em} 1000000000

样例输出

1 \hspace{0.5em} 1\\ 1\\ 1\\ 1 \hspace{0.5em} 2\\ 3 \hspace{0.5em} 3\\ 4 \hspace{0.5em} 4 \hspace{0.5em} 5\\ 1 \hspace{0.5em} 8 \hspace{0.5em} 8 \\ 74 \hspace{0.5em} 74 \hspace{0.5em} 31 \hspace{0.5em} 31 \\ 74 \hspace{0.5em} 74 \hspace{0.5em} 17 \hspace{0.5em} 7 \\ 31 \hspace{0.5em} 17 \hspace{0.5em} 17 \hspace{0.5em} 3 \\ 31 \hspace{0.5em} 7 \hspace{0.5em} 3 \hspace{0.5em} 3 \\ 7 \hspace{0.5em} 7 \hspace{0.5em} 1 \hspace{0.5em} 1 \\ 1 \hspace{0.5em} 1 \hspace{0.5em} 1 \\ 1 \hspace{0.5em} 1 \hspace{0.5em} 1 \\ 1 \hspace{0.5em} 1 \hspace{0.5em} 1

注释

在第一组输入数据中,算法将连续两次选择单元格 (1,1),然后终止。

在第二组输入数据中,没有单元格的值严格大于所有相邻单元格的值。

在第三组输入数据中,算法将选择单元格 (2,2),然后终止。

在第四组输入数据中,算法将选择单元格 (1,1) 三次,然后选择单元格 (2,3) 两次。

思路

将矩阵遍历一遍,对于单元格,如果它的值每个严格大于周围单元格的值,那么将它打值改为周围单元格最大的值。

代码

#include <bits/stdc++.h>
using namespace std;
int t, n, m, a[105][105];
const int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
inline int read() {
    int x = 0, f = 1; char c = getchar();
    while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
    while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}

int main () {
    t = read();
    while (t--) {
        n = read(), m = read();
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++) a[i][j] = read();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                int flag = 1, temp = 0;
                for (int k = 0; k < 4; k++) {
                    int x = i + dx[k], y = j + dy[k];
                    if (x < 1 || x > n || y < 1 || y > m) continue;
                    if (a[x][y] >= a[i][j]) flag = 0;
                    temp = max(temp, a[x][y]);
                }
                if (flag) a[i][j] = temp;
            }
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                printf("%d ", a[i][j]);
            }
            putchar('\n');
        }
    }
    return 0;
}

C. Update Queries

时间限制:2秒        空间限制:256MB        输入:标准输入        输出:标准输出

问题描述

让我们考虑下面这个简单的问题。你有一个长度为 n 的字符串 s,由小写拉丁字母组成,同时有一个长度为 m 的索引数组 ind (1 \le ind_i \le n) 和一个长度为 m 的字符串 \( c \),由小写拉丁字母组成。然后,依次执行更新操作,即在第 i 次操作中,将 s_{ind_i} = c_i。注意,你需要从第一个操作到最后一个操作按顺序执行所有的 m 次操作。

当然,如果你改变数组 ind 中的索引顺序和,或字符串 c 中字母的顺序,你可能会得到不同的结果。找出在 m 次更新操作之后,可以得到的按字典序最小的字符串 s ,如果你可以随意重新排列数组 ind 中的索引和字符串 c 中的字母。

字符串 a 按字典序小于字符串 b 的条件如下:

1. a 是 b 的前缀,但 a \neq n
2. 在 a 和 b 不同的第一个位置,字符串 a 中的字符在字母表中的顺序早于字符串 b 中的对应字符。

输入格式

每个测试包含多个输入数据集。第一行包含一个整数 t (1 \le t \le 10^4),表示输入数据集的数量。接下来是各个数据集的描述。

每个输入数据集的第一行包含两个整数 n 和 m (1 \le n, m \le 10^5),分别表示字符串 s 的长度和更新操作的数量。

每个输入数据集的第二行包含一个长度为 n 的字符串 s,由小写拉丁字母组成。

每个输入数据集的第三行包含 m 个整数 ind_1, ind_2, \ldots, ind_m (1 \le ind_i \le n),表示索引数组 ind。

每个输入数据集的第四行包含一个长度为 m 的字符串 c,由小写拉丁字母组成。

保证所有输入数据集的字符串长度 n 之和不超过 2 \cdot 10^5。同样地,所有输入数据集的更新操作数量 m 之和不超过 2 \cdot 10^5

输出格式

对于每组输入数据,输出通过重新排列索引数组 ind 和字符串 c 中的字母后可以得到的按字典序最小的字符串 s。

样例输入

4\\ 1 \hspace{0.5em} 2\\ a\\ 1 \hspace{0.5em} 1\\ cb\\ 4 \hspace{0.5em} 4\\ meow\\ 1 \hspace{0.5em} 2 \hspace{0.5em} 1 \hspace{0.5em} 4\\ zcwz\\ 7 \hspace{0.5em} 4\\ abacaba\\ 1 \hspace{0.5em} 3 \hspace{0.5em} 5 \hspace{0.5em} 7\\ damn\\ 7 \hspace{0.5em} 10\\ traktor\\ 7 \hspace{0.5em} 6 \hspace{0.5em} 5 \hspace{0.5em} 4 \hspace{0.5em} 3 \hspace{0.5em} 2 \hspace{0.5em} 1 \hspace{0.5em} 6 \hspace{0.5em} 4 \hspace{0.5em} 2\\ codeforces

样例输出

b\\ cwoz\\ abdcmbn\\ ccdeefo\\

注释

在第一组输入数据中,你可以保持数组 ind 和字符串 c 不变,按照它们原始的顺序执行所有操作。

在第二组输入数据中,你可以设置数组 ind = [1, 1, 4, 2],并且 c = "zczw"。然后字符串 s 的变化如下:meow→zeow→ceow→ceoz→cwoz。

在第三组输入数据中,你可以保持数组 ind 不变,并设置 c = "admn"。然后字符串 s 的变化如下:abacaba→abacaba→abdcaba→abdcmba→abdcmbn。

思路

贪心的考虑,要让字符串的字典序最小,那么就要让每个字符串靠前的字符的字典序要尽量小。我们只需要对 ind 数组排序并且去重,对字符串 c 排序之后,再对字符串 s 依次进行修改即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int t, n, m, idx[N], b[N];
char s[N], c[N];
inline int read() {
    int x = 0, f = 1; char c = getchar();
    while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
    while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int main () {
    t = read();
    while (t--) {
        n = read(), m = read();
        scanf("%s", s);
        for (int i = 1; i <= m; i++) idx[i] = read();
        scanf("%s", c);
        for (int i = 0; i < m; i++) b[i] = c[i] - 'a';
        sort(idx + 1, idx + m + 1), sort(b, b + m);
        int size = unique(idx + 1, idx + m + 1) - idx - 1;
        for (int i = 1; i <= size; i++) s[idx[i] - 1] = b[i - 1] + 'a';
        printf("%s\n", s);
    }
    return 0;
}

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

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

相关文章

Windows环境如何ssh远程连接本地局域网内的Archcraft系统

文章目录 前言1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接小结 5. 固定SSH公网地址6. SSH固定地址连接 前言 本文主要介绍如何在Archcraft系统中安装Cpolar内网穿透工具,并以实现Windows环境ssh远程连接本地局域网Archcraft系统来说明使用…

区块链实验室(37) - 交叉编译百度xuperchain for arm64

纠结了很久&#xff0c;终于成功编译xuperchain for arm64。踩到1个坑&#xff0c;说明如下。 1、官方文档是这么说的&#xff1a;go语言版本推荐1.5-1.8 2、但是同一个页面&#xff0c;又是这么说的&#xff1a;不推荐使用1.11之前的版本。 3、问题来了&#xff1a;用什么版本…

数据归档与清理功能大幅升级,NineData重磅升级!

NineData 的数据归档与清理功能已经发布将近半年时间&#xff0c;在这段时间里&#xff0c;解决了一大批企业在过期数据处理方面的大麻烦&#xff0c;可以相对自动化地定期执行如下数据归档与清理工作。 识别业务库中的归档数据→移动到归档库→清理业务库的已归档数据→整理业…

【力扣C++】爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…

解决Playwright在Ubuntu下启动报错的问题:从环境到依赖的全面优化

在Ubuntu环境中使用Python进行web自动化测试时,Playwright是一个非常强大的工具。然而,在具体实践中,我们常常会遇到各种错误,尤其是在不同Python版本和依赖版本之间切换时。本文将详细介绍如何应对这些问题,并提供一些解决方法。 问题背景 在使用Playwright时,我们有时…

docker-compose离线安装harbor

1、下载harbor goharbor下载&#xff1a;Releases goharbor/harbor GitHub harbor-offline-installer-v2.11.0.tgz 2、解压 tar -xvf harbor-offline-installer-v2.11.0.tgz 3、创建一个卷目录&#xff0c;并复制一份配置文件 cd harbor; mkdir data;cp harbor.yml.tmp…

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /…

[Linux]缓冲区

一、概念 缓冲区&#xff0c;也称为缓存&#xff0c;是内存空间的一部分。也就是说&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;用来缓冲输入或输出的数据。这个保留的空间称为缓冲区。 缓冲区的主要作用就是提高效率&#xff1a; 提高使用者的效率&#xff0…

【吊打面试官系列-Mysql面试题】NULL 是什么意思?

大家好&#xff0c;我是锋哥。今天分享关于 【NULL 是什么意思&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; NULL 是什么意思? 答&#xff1a;NULL 这个值表示 UNKNOWN(未知):它不表示“”(空字符串)。对 NULL 这个值的任何比较都会生产一个 NULL 值。您不能…

Qt项目天气预报(6) - 引入QMap: debug+更新天气图片

QMAP 解决bug (&#xff09; bug描述 由于json文件中有的地方不带市&#xff0c;有的地方带县&#xff0c;有的地方是区&#xff0c;我们匹配不上这个地方&#xff0c;我们可以使用QString进行字符串拼接来实现。 另外&#xff0c;我们之前的 getCityCodeFromName()函数写得…

使用python连接dy直播间的websocket消息,竟然一会就自动断开了

使用python的websocket创建一个客户端连接直播间的消息&#xff0c;可是过一会就自动断开了&#xff0c;使用rust尝试连接也是一样的效果&#xff0c;过一会就自动断开了&#xff0c;而且报错&#xff1a; 我们先使用python建立一个客户端试一下&#xff1a; # 导入websocket-…

免费的AI在线写作工具,让写作变的更简单

在如今的时代&#xff0c;写作已经成为了我们日常生活中不可或缺的一部分。无论是自媒体创作者、学生还是办公职场人员&#xff0c;都有内容创作的需求。然而&#xff0c;写作过程往往伴随着灵感枯竭、查找资料费时等问题。下面小编就来和大家分享几款免费的AI在线写作工具&…

桌面编辑器ONLYOFFICE 功能多样性快来试试吧!

目录 ONLYOFFICE 桌面编辑器 8.1 ONLYOFFICE介绍 主要功能和特点 使用场景 1.PDF编辑器 2.幻灯片版式 3.编辑&#xff0c;审阅和查看模式 4.隐藏连接到云版块 5.RTL语言支持和本地化选项 6.媒体播放器 7、其他新功能 8.下载 总结 ONLYOFFICE 桌面编辑器 8.1 官网地…

视频监控EasyCVR视频汇聚/智能边缘网关:EasySearch无法探测到服务器如何处理?

安防监控EasyCVR智能边缘网关/视频汇聚网关/视频网关属于软硬一体的边缘计算硬件&#xff0c;可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时…

数字人视频剪辑解决方案,个性化定制服务

如何高效、专业地剪辑出高质量的数字人视频&#xff0c;却成为众多企业面临的难题。针对这一挑战&#xff0c;美摄科技凭借其在人工智能、计算机视觉等领域的深厚积累&#xff0c;推出了面向企业的数字人视频剪辑解决方案&#xff0c;为企业带来前所未有的视频制作新体验。 一…

Spring Cloud学习:如何实现Gateway 服务网关限流

目录 一、Spring Cloud介绍二、什么是服务网关三、Gateway的优势和应用场景四、如何实现Gateway 服务网关限流 一、Spring Cloud介绍 Spring Cloud是一个基于Spring Boot的微服务架构开发工具集&#xff0c;它整合了多种微服务解决方案&#xff0c;为开发者提供了一站式的微服…

智慧协同革新工业设计,创作评审无界畅达

工业产品研发是一个结合了创意、艺术和技术的综合性行业。设计师们通过深入理解文化、市场和消费者需求&#xff0c;运用各种材料和工艺&#xff0c;创造出具有独特魅力和价值的工业产品。这个行业涵盖了从设计、制作到销售等多个环节&#xff0c;需要团队成员之间的紧密协作和…

银联支付,你竟然还不知道它怎么工作?

银联支付咱都用过&#xff0c;微信和支付宝没这么“横行”的时侯&#xff0c;我们取款、转账、付款时用的ATM机、POS机&#xff0c;都是银联支付完成的。 今天&#xff0c;就让咱们了解一下银行卡支付的工作原型。 首先&#xff0c;说说中国银联 中国银联&#xff08;China U…

如何区分应用所在的运行环境?

常见的应用运行环境主要有&#xff1a;物理机、虚拟机、容器或 K8s&#xff0c;那么如何确定应用运行在哪种未知环境下呢&#xff1f;本文主要介绍如何通过一种简单方式来判断应用当前所在的运行环境。 1 物理机 物理机和虚拟机因为都是完整的操作系统。因此可以用dmidecode来…

ETO MARKETS:美股涨势告急?通胀风暴或成市场新拐点

摘要&#xff1a; 近期美股涨势引发了市场对其可持续性的质疑。随着通胀数据的发布&#xff0c;全球利率前景可能面临新的变化。投资者需关注即将到来的通胀数据及其对市场的影响。本周的市场波动加剧&#xff0c;政治风险和经济数据共同作用&#xff0c;将为未来的市场走向提…