Codeforces Round 953 (Div.2)

news2025/2/26 9:27:28

传送门

A. Alice and Books

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

题目描述

Alice 有 n 本书。第 1 本书有 a_1 页,第 2 本书有 a_2 页,依此类推,第n本书有 a_n 页。Alice 做了以下操作:

她把所有的书分成两个非空的堆。因此,每本书最终都会被放在这两个堆中的一个。
Alice 在每个堆中选择编号最大的一本书来阅读。
Alice 非常喜欢阅读。帮助她找出通过将书分成两堆后,她可以阅读的最大总页数。

输入格式

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

每个测试用例的第一行包含一个整数 n (2 \le n \le 100),表示 Alice 拥有的书的数量。

每个测试用例的第二行包含 n 个整数 a_1, a_2, \cdots, a_n (1 \le a_i \le 10^9),表示每本书的页数。

输出格式

对于每个测试用例,输出一个整数,表示 Alice 可以阅读的最大页数。

样例输入

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

样例输出

2\\ 4\\ 5\\ 13\\ 5

思路

无论怎么分堆,编号最大的书一定是会被阅读的;除此之外,还可以阅读剩余书本中页数最多的书

注释

在第一个测试用例中,Alice 可以把第 1 本书放在第一个堆里,把第 2 本书放在第二个堆里。然后她会阅读 a_1 + a_2 = 1 + 1 = 2 页。

在第二个测试用例中,Alice 可以把第 2 本书和第 3 本书放在第一个堆里,把第 1 本书和第 4 本书放在第二个堆里。然后她会从第一个堆中阅读页数最多的第 3 本书,从第二个堆中阅读页数最多的第 4 本书。然后她会阅读 a_3 + a_4 = 3 + 1 = 4 页。

代码

#include <bits/stdc++.h>
using namespace std;
int t, n, a[105];
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();
        for (int i = 1; i <= n; i++) a[i] = read();
        int ans = 0;
        for (int i = n - 1; i; i--) ans = max(ans, a[i]);
        ans += a[n];
        printf("%d\n", ans);
    }
    return 0;
}

B. New Bakery

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

题目描述

Bob 决定开一家面包店。在开业当天,他烤了 n 个可以出售的面包。面包的通常价格是 a 个硬币,但为了吸引顾客,Bob 组织了以下促销活动:

  • Bob 选择某个整数 k (0 \le k \le min(n, b))。
  • Bob 以修改后的价格出售前 k 个面包。在这种情况下,第 i 个 (1 \le i \le k) 售出的面包的价格是 b - i + 1 个硬币。
  • 剩下的 n - k 个面包以 a 个硬币的价格出售。

注意,k 可以等于 0。在这种情况下,Bob将以 a 个硬币的价格出售所有面包。

请帮助 Bob 确定通过出售所有 n 个面包可以获得的最大利润。

输入格式

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

每个测试用例的唯一一行包含三个整数 n , a 和 b (1 \le n,a,b \le 10^9),分别表示面包的数量、面包的通常价格和第一个以修改价格出售的面包的价格。

输出格式

对于每个测试用例,输出一个整数,表示Bob可以获得的最大利润。

样例输入

7\\ 4 \hspace{0.5em} 4 \hspace{0.5em} 5\\ 5 \hspace{0.5em} 5 \hspace{0.5em} 9\\ 10 \hspace{0.5em} 10 \hspace{0.5em} 5\\ 5 \hspace{0.5em} 5 \hspace{0.5em} 11\\ 1000000000 \hspace{0.5em} 1000000000 \hspace{0.5em} 1000000000\\ 1000000000 \hspace{0.5em} 1000000000 \hspace{0.5em} 1\\ 1000 \hspace{0.5em} 1 \hspace{0.5em} 1000

样例输出

17\\ 35\\ 100\\ 45\\ 1000000000000000000\\ 1000000000000000000\\ 500500

思路

只有当修改后的价格大于修改前的价格才进行价格修改,即

b - i + 1 \ge a \Rightarrow i \le b - a + 1

假设前 k 个面包需要修改的价格,为了使利润最大,我们要使 k = b - a + 1,但同时,k 也要在[0, n] 的范围之内,最后得出来的总价格为:

sum = k \times (b - i + 1) + (n - k) \times a \Rightarrow k(b + 1) - \frac{k(k + 1)}{2} + (n - k)a

注释

在第一个测试用例中,Bob 最优的选择是 k = 1。然后他将以 5 个硬币的价格卖出一个面包,并以每个 4 个硬币的通常价格卖出三个面包。这样利润将是 5 + 4 + 4 + 4 = 17 个硬币。

在第二个测试用例中,Bob 最优的选择是 k = 5。然后他将所有面包以修改后的价格卖出,获得利润 9 + 8 + 7 + 6 + 5 = 35 个硬币。

在第三个测试用例中,Bob 最优的选择是 k = 0。然后他将所有面包以通常的价格卖出,获得利润 10 \times 10 = 100 个硬币。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
int t, n, a, b;
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;
}
signed main() {
    t = read();
    while (t--) {
        n = read(), a = read(), b = read();
        int k = min(n, b - a + 1), sum;
        if (k < 0) k = 0;
        sum = k * (b + 1) - k * (k + 1) / 2 + (n - k) * a;
        printf("%lld\n", sum);
    }
    return 0;
}

C. Manhattan Permutations

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

题目描述

我们称排列 p 的曼哈顿值为表达式 |p_1 - 1| + |p_2 - 2| + \cdots + |p_n - n| 的值。

例如,对于排列 [1, 2, 3],曼哈顿值是 |1 - 1| + |2 - 2| + |3 - 3| = 0;对于排列 [3, 1, 2],曼哈顿值是 |3 - 1| + |1 - 2| + |2 - 3| = 2 + 1 + 1 = 4。

给定整数 n 和 k。找到长度为 n 的一个排列 p,使其曼哈顿值等于 k,或者确定不存在这样的排列。

† 一个长度为 n 的排列是一个包含从 1 到 n 的 n 个不同整数的数组。例如, [2, 3, 1, 5, 4] 是一个排列,但 [1, 2, 2] 不是一个排列(2 在数组中出现了两次),并且 [1, 3, 4] 也不是一个排列(n = 3 但数组中有 4)。

输入格式

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

每个测试用例的唯一一行包含两个整数 n 和 k (1 \le n \le 2 \times 10^5, 0 \le k \le 10^{12}),分别表示排列的长度和所需的曼哈顿值。

保证所有测试用例中 n 的总和不超过 2 \times 10^5

输出格式

对于每个测试用例,如果没有合适的排列,输出 "No"。否则,第一行输出 "Yes",第二行输出 n 个不同的整数 p_1, p_2, \cdots, p_n (1 \le p_i \le n),表示一个合适的排列。

如果有多个解决方案,可以输出其中任何一个。

你可以以任何大小写形式输出答案(例如,"yEs", "yes", "Yes" 和 "YES" 都是正确答案)。

样例输入

8\\ 3 \hspace{0.5em} 4\\ 4 \hspace{0.5em} 5\\ 7 \hspace{0.5em} 0\\ 1 \hspace{0.5em} 1000000000000\\ 8 \hspace{0.5em} 14\\ 112 \hspace{0.5em} 777\\ 5 \hspace{0.5em} 12\\ 5 \hspace{0.5em} 2

样例输出

Yes\\ 3 \hspace{0.5em} 1 \hspace{0.5em} 2\\ No\\ Yes\\ 1 \hspace{0.5em} 2 \hspace{0.5em} 3 \hspace{0.5em} 4 \hspace{0.5em} 5 \hspace{0.5em} 6 \hspace{0.5em} 7\\ No\\ Yes\\ 8 \hspace{0.5em} 2 \hspace{0.5em} 3 \hspace{0.5em} 4 \hspace{0.5em} 5 \hspace{0.5em} 6 \hspace{0.5em} 1 \hspace{0.5em} 7\\ No\\ Yes\\ 5 \hspace{0.5em} 4 \hspace{0.5em} 3 \hspace{0.5em} 1 \hspace{0.5em} 2\\ Yes\\ 2 \hspace{0.5em} 1 \hspace{0.5em} 3 \hspace{0.5em} 4 \hspace{0.5em} 5

注释

在第一个测试用例中,排列 [3, 1, 2] 是合适的,其曼哈顿值为 |3 - 1| + |1 - 2| + |2 - 3| = 2 + 1 + 1 = 4。

在第二个测试用例中,可以证明长度为 4 的排列不存在其曼哈顿值为 5 的情况。

在第三个测试用例中,排列 [1, 2, 3, 4, 5, 6, 7] 是合适的,其曼哈顿值为 |1 - 1| + |2 - 2| + |3 - 3| + |4 - 4| + |5 - 5| + |6 - 6| + |7 - 7| = 0。

思路

  • 假设最初始的排列为 p_i = i,任意交换两个 p_i 的值,曼哈顿排列都为偶数。

证明:对于任意的 1 \le i < j \le n,交换 p_i 和 p_j 的值后,曼哈顿值就会变成

|p_i - i| + |p_j - j| = 2 \times |j - i| = 2 \times(j - i)

  • 将首尾对应位置的 p_i 的值全部交换之后,曼哈顿值一定是最大的,且最大的曼哈顿值为 

2 \times ((n - 1) + (n - 3) + \cdots + 1) = \frac{n^2}{2}

所以如果 k 是奇数或者 k > \frac{n^2}{2},不存在对应的曼哈顿排列,否则存在曼哈顿排列。

如果存在对应的曼哈顿排列,接下来我们再找出对应的曼哈顿排列。

只需要从头开始遍历,如果交换首尾对应元素后曼哈顿值小于 k,则进行交换;否则,如果现有曼哈顿值比 k 小 x,则交换第 i 位和第 i + \frac{x}{2} 位元素,并且结束遍历。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 4e5 + 10;
int t, n, k, p[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;
}
signed main() {
    t = read();
    while (t--) {
        n = read(), k = read();
        if ((k & 1) || n * n / 2 < k) { puts("No"); continue; }
        puts("Yes");
		k /= 2;
        for (int i = 1; i <= n; i++) p[i] = i;
        for (int i = 1; k > 0; i++) {
            if (n + 1 - 2 * i <= k) {
                swap(p[i], p[n - i + 1]);
                k -= n - 2 * i + 1;
            } else {
				swap(p[i], p[i + k]);
				k = 0;
			}
        }
        for (int i = 1; i <= n; i++) printf("%d ", p[i]);
		putchar('\n');
    }
    return 0;
}

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

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

相关文章

c库函数:strrchr使用demo案例

1. strrchr库函数说明 头文件 <string.h> 函数形式 char *strrchr( const char *str, int ch ); 功能 在str所指向的空终止字节串中寻找字符ch的最后出现。 参数 str - 指向要分析的空终止字节字符串的指针 ch - 要搜索的字符 返回值 指向 str 中找到的字符的…

【Docker安装】Ubuntu系统下部署Docker环境

【Docker安装】Ubuntu系统下部署Docker环境 前言一、本次实践介绍1.1 本次实践规划1.2 本次实践简介二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本2.3 更新软件源三、卸载Docker四、部署Docker环境4.1 安装Docker4.2 检查Docker版本4.3 配置Docker镜像加速4.4 启动Doc…

关于车规级功率器件热可靠性测试的分享

随着中国电动汽车市场的稳步快速发展和各大车企布局新能源的扩散&#xff0c;推动了车规级功率器件的快速增长。新能源汽车行业和消费电子都会用到半导体芯片&#xff0c;但车规级芯片对外部环境要求很高&#xff0c;涉及到的一致性和可靠性均要大于工业级产品要求&#xff0c;…

优化改进YOLOv5算法之Shift-ConvNets,具有大核效应的小卷积核,效果提升明显

目录 1 Shift-ConvNets模块原理 1.1 Decomposition and Combination of Convolution 1.2 Sparse Dependencies of Large Convolution Kernels 1.3 Intermodule Feature Manipulation 2 YOLOv5中加入Shift-ConvNets模块 2.1 common.py文件配置 2.2 yolo.py配置 2.3 创建…

龙讯旷腾PWmat计算vdW异质结中热载流子冷却 | 复刻《Phys. Chem. Chem. Phys 》文献

01 NAMD 背景介绍 在各类光物理与光化学过程当中&#xff0c;均会牵涉到激发态载流子动力学过程&#xff0c;诸如电荷弛豫、复合以及输运等等。光激发或者电子注入将初始的平衡状态打破&#xff0c;所产生的热载流子在其演化进程中&#xff0c;会与原子核产生强烈耦合。此时&a…

Elsevier曝光73篇论文操纵同行评审,涉嫌操纵同行评审和人为引用

近日&#xff0c;全球知名学术出版商爱思唯尔&#xff08;Elsevier&#xff09;旗下期刊《Engineering Analysis with Boundary Elements》对73篇论文发出了关注声明&#xff0c;这些论文涉嫌操纵同行评审和人为引用。去年7月&#xff0c;该期刊前编委Masoud Afrand被指涉嫌论文…

OceanBase v4.2 特性解析:支持并发建表,提升OMS导入效率

背景 OceanBase 4.0版本新增了单日志流架构&#xff0c;使得OBServer单机突破了原有的分区数限制&#xff0c;支持更大数量的分区。 很多业务环境为了处理单机数据量过大的问题&#xff0c;通常采取分库分表的方法&#xff0c;这一方法会导致业务需要创建数十万乃至百万级别的…

电网铁塔安全:输电线路智能螺栓在线监测装置|远程了解螺栓异常情况

电网铁塔安全&#xff1a;输电线路智能螺栓在线监测装置|远程了解螺栓异常情况 在浩渺的天空下&#xff0c;银线如织&#xff0c;纵横交错&#xff0c;那是我们的输电线路&#xff0c;是点亮万家灯火的血脉。然而&#xff0c;这看似坚强的网络&#xff0c;实则也隐藏着许多不为…

新港海岸NCS8801 RGBLVDS转DPEDP,支持4K60HZ,成熟方案大批量出货产品,国产化认证

NCS8801描述&#xff1a; NCS8801S是一种低功耗的RGB/LVDS到显示端口/eDP转换器&#xff0c;专为智能手机、平板电脑、笔记本电脑等移动设备而设计。以支持高清DP/eDP显示器。NCS8801S支持4车道DP/eDP输出&#xff0c;这通常需要以60Hz的帧率支持QXGA&#xff08;2048*1536&am…

数据可视化作业二:中国城市地铁数据可视化

目录 作业要求 一、绘制每个城市站点数量柱状图&#xff08;降序排列&#xff09; 1.1 每个城市站点数量统计 1.1.1 代码展示 1.1.2 统计结果展示 1.2 柱状图绘制 1.2.1 代码实现 1.2.2 绘制结果 二、绘制上海市地铁线路站点数饼状图 2.1 数据处理 2.2 代码实现 2.3…

RabbitMQ详解-06RabbitMQ高级

1. 过期时间TTL 可以对消息设置预期的时间&#xff0c;在这个时间内都可以被消费者接收获取&#xff1b;过了之后消息自动被删除。RabbitMQ可以对消息和队列设置TTL。有以下两种设置方法&#xff1a; 通过队列属性设置&#xff0c;队列中所有消息都有相同的过期时间。对消息进…

STM32学习笔记(六)--引脚重映射详解

STM32F103C8T6引脚定义&#xff1a; 在STM32微控制器中&#xff0c;外设引脚的复用功能&#xff08;Alternate Function&#xff0c;AF&#xff09;有时会出现冲突&#xff0c;例如当USART2_CTS和TIM2_CH1同时需要使用相同的引脚时。此时&#xff0c;可以通过引脚重映射功能&am…

AI播客下载:The Gradient-AI前沿见解

The Gradient 是一个致力于让更多人轻松了解人工智能&#xff0c;并促进人工智能社区内讨论的组织。我们目前开展的项目包括 The Gradient 杂志、The Gradient 播客、The Update 通讯以及 Mastodon 实例 Sigmoid Social。 我们是一个由来自不同机构和公司的研究生、研究人员及…

三十分钟学会RabbitMQ

1、初识MQ 1.1 MQ是什么&#xff1f; MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中存放的内容是message而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互联网架构中…

Wills Room Environment Dormitory Room Environment

有126个独特的网格。包括所有展示的资产和优质资产。具有良好的细节水平,并针对Gameready项目进行了优化。 艺术家Jonjo Hemmens创造的环境 如果想填充你的游戏环境或任何类型的虚拟制作级别,这里有一个包,你可以获得并使用它来得到高质量的视觉效果和优化的资产。 下载:​…

Unicorn批量模拟执行爆破实践

实践题目&#xff1a;CFI-CTF 2018 Automated Reversing 代码与附件地址&#xff1a;https://github.com/Airrcat/unicorn_loader 目标附件如&#xff1a; 每份附件的代码大致如下&#xff1a; 简单来说&#xff0c;程序会接收命令行参数并作一个字节的运算后与一固定值的字…

转型技术管理:九大步骤解锁高效管理新境界

文章目录 引言一、寻求反馈二、从员工的角度看待问题三、总览全局四、管理自己的情绪五、赞赏员工的出色工作六、在人前支持员工七、管理自己的职业生涯八、认识到自己也许存在偏见&#xff0c;与不同于自己的人交流九、在工作中建立信任和沟通总结 引言 在快速变化的科技浪潮…

SparkSQL的分布式执行引擎-Thrift服务:学习总结(第七天)

系列文章目录 SparkSQL的分布式执行引擎 1、启动Thrift服务 2、beeline连接Thrift服务 3、开发工具连接Thrift服务 4、控制台编写SQL代码 文章目录 系列文章目录前言一、SparkSQL的分布式执行引擎(了解)1、启动Thrift服务2、beeline连接Thrift服务3、开发工具连接Thrift服务4、…

opencascade AIS_InteractiveContext源码学习相关枚举 AIS_SelectionScheme AIS_StatusOfPick

AIS_SelectionScheme 枚举 AIS_SelectionScheme 设置交互上下文中的选择方案。 枚举值&#xff1a; AIS_SelectionScheme_UNKNOWN 未定义的方案 AIS_SelectionScheme_Replace 清除当前选择并选择检测到的对象 AIS_SelectionScheme_Add 将检测到的对象添加到当前选择 AIS_…

【Kubernetes项目部署】k8s集群+高可用、负载均衡+防火墙

项目架构图 &#xff08;1&#xff09;部署 kubernetes 集群 详见&#xff1a;http://t.csdnimg.cn/RLveS &#xff08;2&#xff09; 在 Kubernetes 环境中&#xff0c;通过yaml文件的方式&#xff0c;创建2个Nginx Pod分别放置在两个不同的节点上&#xff1b; Pod使用hostP…