G. Gears (2022 ICPC Southeastern Europe Regional Contest. )

news2024/11/26 10:26:45

G. Gears

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路:
本身这个题并不难,奈何卡了很久后看了题解才做出来,感觉自己好笨。

很容易想到的是,只要确定了一个齿轮的位置,其他齿轮的位置都可以直接推出来。所以当前目标是如何确定第一个齿轮的位置。
x [ i ] x[i] x[i]为第 i i i个轴的坐标, s [ i ] s[i] s[i]为第 i i i个轴上齿轮的半径,则有递推式:
s [ i ] = x [ i ] − x [ i − 1 ] − s [ i − 1 ] s[i]=x[i]-x[i-1]-s[i-1] s[i]=x[i]x[i1]s[i1]
又最左侧轴对应齿轮的半径为 s [ 1 ] s[1] s[1] ,容易得知 s [ i ] s[i] s[i]的形式为:
s [ i ] = a i + s [ 1 ] s[i] = a_i + s[1] s[i]=ai+s[1] , i i i 为奇数
s [ i ] = a i − s [ 1 ] s[i] = a_i - s[1] s[i]=ais[1] , i i i 为偶数
所以令 s [ 1 ] = 0 s[1]=0 s[1]=0 即可递推求得 a [ i ] a[i] a[i], 再分奇偶找到 a i a_i ai的最大值 a m a x 奇 a_{max奇} amax a m a x 偶 a_{max偶} amax,此时 s i s_i si也应该最大,所以半径最大的齿轮( r m a x r_{max} rmax)一定在这两个位置之一。
为了方便检验,可以得到 s [ 1 ] s[1] s[1] = r m a x − a m a x 奇 r_{max} - a_{max奇} rmaxamax a m a x 偶 − r m a x a_{max偶}-r_{max} amaxrmax
最后分别验证一下这两个结果,找到成立的情况输出结果即可。

代码:

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define pb push_back
#define pii pair<int,int>
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
typedef long long ll;
using namespace std;
const int N = 500005;
int n;
int s[N];
int r[N];
int a[N];
int t[N];
int ans[N];

bool check(int x) { //检验最左侧齿轮半径为x的情况
	t[1] = x;
	for (int i = 2; i <= n; i++) {
		t[i] = s[i] - s[i - 1] - t[i - 1];
	}
	for (int i = 1; i <= n; i++) {
		ans[i] = t[i];
	}
	sort(t + 1, t + n + 1);
	for (int i = 1; i <= n; i++) {
		if (t[i] != r[i]) {
			return false;
		}
	}
	return true;
}


void solve() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> s[i];
	}
	for (int i = 1; i <= n; i++) {
		cin >> r[i];
	}
	sort(r + 1, r + n + 1);
	int mj, mo = -INF;
	mj = a[1] = 0;
	mo = a[2] = s[2] - s[1];
	for (int i = 3; i <= n; i += 2) {
		a[i] = s[i] + s[i - 2] - 2 * s[i - 1] + a[i - 2];
		mj = max(mj, a[i]);
	}
	for (int i = 4; i <= n; i += 2) {
		a[i] = s[i] + s[i - 2] - 2 * s[i - 1] + a[i - 2];
		mo = max(mo, a[i]);
	}
	if (check(r[n] - mj)) {
		for (int i = 1; i <= n; i++) {
			cout << ans[i] << " ";
		}
	} else if (check(mo - r[n])) {
		for (int i = 1; i <= n; i++) {
			cout << ans[i] << " ";
		}
	}
}

signed main() {
	cin.tie(0)->ios::sync_with_stdio(0);
	int T = 1;
//	cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}

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

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

相关文章

第2篇:Windows权限维持----应急响应之权限维持篇

关键词&#xff1a;Windows系统后门、权限维持 在获取服务器权限后&#xff0c;通常会用一些后门技术来维持服务器权限&#xff0c;服务器一旦被植入后门&#xff0c;攻击者便如入无人之境。本文将对常见的window服务端自启动后门技术进行解析&#xff0c;知己知彼方能杜绝后门…

系统规划与管理——1信息系统综合知识(4)

文章目录 1.3 信息系统1.3.4 信息系统总体规划 1.3 信息系统 1.3.4 信息系统总体规划 信息系统总体规划的概念和作用 一个组织或一个区域的信息系统建设&#xff0c;都要经历由初始到成熟的发展过程。诺兰总结了信息系统发展的规律&#xff0c;在1973年提出了信息系统发展的阶…

《Linux从小白到高手》理论篇:Linux的系统服务管理

值此国庆佳节&#xff0c;深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。本篇详细深入介绍Linux的系统服务管理。 系统服务通常在系统启动时自动启动&#xff0c;并在后台持续运行&#xff0c;为系统和用户提供特定的功能。例如&#xff0c;网络服务、打印服务、数…

CSP-J/S复赛算法 动态规划初步

文章目录 前言动态规划动态规划常见形式动态规划求最值的几个例子1. **背包问题**2. **最短路径问题**3. **最小硬币找零问题**4. **最长递增子序列** 总结 最优子结构举个简单的例子其他例子条件 DP的核心就是穷举具体解释 递归的算法时间复杂度dp数组的迭代解法通俗易懂的解释…

mysql表和表中记录的操作·2

表中字段的操作表中记录的操作SQL约束 1.表中字段的操作 字段/列column 知识点 在表中添加一列&#xff1a;alter table 表名 add 字段名 字段类型; 在表中删除一列&#xff1a;alter table 表名 drop 字段名; 在表中修改字段名和字段类型&#xff1a;alter table 表名…

IO零拷贝技术

01背景介绍 相信不少的网友&#xff0c;在很多的博客文章里面&#xff0c;已经见到过零拷贝这个词&#xff0c;会不禁的发出一些疑问&#xff0c;什么是零拷贝&#xff1f; 从字面上我们很容易理解出&#xff0c;零拷贝包含两个意思&#xff1a; 拷贝&#xff1a;就是指数据从…

Lesson1 - 操作系统概述与硬件视角

文章目录 什么是操作系统操作系统的形成 从程序看OS提出问题&#xff1a;从hello world文件开始目前编译器帮我们解决了诸多问题gcc的编译过程 CPU的运作CPU对任务的切换 什么是操作系统 操作系统 Operating System 是一组控制和管理计算机 硬件 和 软件 资源合理地对各类作业…

深入理解NumPy库:常用函数详解与数组操作指南

在数据科学和数值计算领域&#xff0c;NumPy无疑是一个强大的工具&#xff0c;它为Python提供了高效的多维数 组处理能力。无论是进行数据分析、构建机器学习模型&#xff0c;还是进行复杂的科学计算&#xff0c;NumPy都是 不可或缺的核心库之一。 numpy.array 是 NumPy 库中…

Python 从入门到实战34(实例2:绘制蟒蛇)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用…

C语言指针plus版练习

上期我们讲了进阶的指针&#xff0c;本期内容我们来强化一下上期学的内容 一、字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 1.1 分析题目 假设字符串为abcde&#xff0c;左旋一个以后就变成bcdea&#xff0c;就是把第一个字符移到一个新的变量里面&#…

5G NR BWP 简介

文章目录 BWP介绍BWP 分类BWP相关总结 BWP介绍 5G NR 系统带宽比4G LTE 大了很多&#xff0c;4G LTE 最大支持带宽为20MHz&#xff0c; 而5G NR 的FR1 最大支持带宽为100MH在&#xff0c; FR2 最大支持带宽为 400MH在。带宽越大&#xff0c;意味了终端功耗越多。为了减少终端的…

哪款百元头戴式耳机性价比高?四款大火爆全网的机型盘点推荐!

在繁忙的生活节奏中&#xff0c;寻找一片属于自己的宁静空间&#xff0c;成为了许多人的内心渴望。头戴式降噪耳机&#xff0c;正是那把打开音乐世界的钥匙。它不仅能够隔绝外界的喧嚣&#xff0c;还能将您带入一个纯净无瑕的音乐世界。无论是沉浸在古典乐的悠扬旋律中&#xf…

数据服务-存储服务(NFS)

1.概述 存储: 用于存放用户上传的内容(数据),一般应用在网站集群中 如果不使用存储,用户上传的数据就直接存放在网站服务器上了,用户下次访问就可能找不到 如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储. 位置: 网站后排. 2. 存储分类 分类说明硬件存储硬件…

【高等数学学习记录】函数的极限

一、知识点 &#xff08;一&#xff09;知识结构 #mermaid-svg-Dz0Ns0FflWSBWY50 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Dz0Ns0FflWSBWY50 .error-icon{fill:#552222;}#mermaid-svg-Dz0Ns0FflWSBWY50 .erro…

KiCad 综合笔记

开窗 选中顶层或者底层 Mask 层,然后进行覆铜: 四层板 KiCad Tutorial - How to make a 4 layer PCB https://bbs.elecfans.com/jishu_2365544_1_1.html 虽然在“电路板设置”中,可以选择铜层的类型,但如果选择了“电源层”,除了用于告诉“Free router”布线器在自动布…

vue3+vite@4+ts+elementplus创建项目详解

1、第一步创建项目cnpm init vite4 2、设置vue3.2局域网可访问配置&#xff1a; 找到项目路径下的package.json目录下找到script对象下面添加一下代码&#xff1a; "serve": "vite --host 0.0.0.0" 启动项目命令不在是dev而是&#xff1a;cnpm run serve 3…

Linux中的进程信号

目录 进程信号 kill/raise/abort 硬件异常产生信号 由软件条件产生信号 信号在内核中的表示示意图 pending: block: 信号集操作函数 sigprocmask 进程信号 信号量和信号不同 信号量的本质是计数器&#xff0c;计数器可以被多进程同时看到。可以对资源进行预定。 所有进…

OpenJudge | 置换选择排序

总时间限制: 1000ms 内存限制: 65536kB 描述 给定初始整数顺串&#xff0c;以及大小固定并且初始元素已知的二叉最小堆&#xff08;为完全二叉树或类似完全二叉树&#xff0c;且父元素键值总小于等于任何一个子结点的键值&#xff09;&#xff0c;要求利用堆实现置换选择排序&a…

程序员如何在 AI 时代保持核心竞争力

前言 随着 AIGC 大语言模型的不断涌现&#xff0c;AI 辅助编程工具的普及正在深刻改变程序员的工作方式。在这一趋势下&#xff0c;程序员面临着新的挑战与机遇&#xff0c;需要思考如何应对以保持并提升自身的核心竞争力。 目录 一、AI 对编程工作的影响 &#xff08;一&…

一、走进新语言

走进新语言 介绍环境配置JDK配置Kotlin配置 开发工具代码基本结构程序注释 介绍 Kotlin是一种现代但已经成熟的编程语言&#xff0c;旨在让开发人员更快乐。它简洁、安全、可与Java和其他语言互操作&#xff0c;并提供了许多在多个平台之间重用代码的方法。它由JetBrains公司于…