C. Dora and C++

news/2025/3/6 17:13:37/文章来源:https://www.cnblogs.com/PMpro/p/18755892

实际上,我们不仅可以加 \(a\),或者加 \(b\)

由于我们只在乎相对差,所以我们可以做减 \(a\),减 \(b\),加 \(\lvert a-b\rvert\) 等更多操作。

发现实际上,我们如果一直计算类似两个数相减的值,最终得到的一个数就会是 \(\gcd(a,b)\),这是由于辗转相除法。我们同样可以知道,所有数都是 \(\gcd(a,b)\) 的倍数。因此,考虑只对原数进行无限次加 \(\gcd(a,b)\) 的操作得到的答案和原问题的答案相等,也就是说,这两个问题等价。

接下来,求我们可以对每个数加或减 \(\gcd(a,b)\) 的答案。

两个数 \(x,y(x>y)\) 的差在模 \(\gcd(a,b)\) 意义下分别是 \((x-y) \bmod \gcd(a,b),\gcd(a,b)-(x-y) \bmod \gcd(a,b)\)

我们将所有 \(x \bmod \gcd(a,b)\) 从小到大排序作为 \(B\),然后最大值减最小值就是所有差全部取第一种的答案。

\(B_{n}-B_{1}\)

如果想取第二种,那么我们可以证明,只有寻找一个分割点,左边的全部加 \(\gcd(a,b)\),右边的全部不变才有可能取到答案。

\(\min\{B_{i}+\gcd(a,b)-B_{i+1}\}\)

两种情况继续取最小值。

// Problem: C. Dora and C++
// Contest: Codeforces - Codeforces Round 969 (Div. 2)
// URL: https://codeforces.com/contest/2007/problem/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
#define int long long
#define upp(a, x, y) for (int a = x; a <= y; a++)
#define dww(a, x, y) for (int a = x; a >= y; a--)
#define pb(x) push_back(x)
#define endl '\n'
#define x first
#define y second
#define PII pair<int, int>
using namespace std;
const int N = 1e6 + 10, INF = 0x3f3f3f3f3f3f3f3f;
int ac[N], n, a, b;
signed main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int tt;cin >> tt;while (tt--) {int ans = INF;cin >> n >> a >> b;int gcdd = __gcd(a, b);int maxn = -INF, minn = INF;upp(i, 1, n) {int x;cin >> x;ac[i] = x % gcdd;}sort(ac + 1, ac + 1 + n);ans = min(ans, ac[n] - ac[1]);upp(i, 1, n - 1) { ans = min(ans, ac[i] + gcdd - ac[i + 1]); }cout << ans << endl;}return 0;
}

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

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

相关文章

python install spacy 报错解决

python install spacy 法1 修改setuptool版本(无效)法2 安装前置依赖(无效)pip install numpy cython jinja2 pathlib preshed thinc cymem murmurhash blis plac 法3 使用预编译的轮子文件安装(有效)pip install --prefer-binary spacy

可视化大屏出圈密码: 地图组件深度解析

01 组件介绍 在数据可视化大屏搭建中,地图组件是使用最频繁且重要的组件之一。它不但能直观展现地理方位相关信息,还能通过与标记点、飞线、图表等各类组件巧妙搭配,达成更加多元、生动的数据呈现效果,在众多行业领域都得到了广泛应用。鉴于其强大的适配能力,面对包含地理…

.NET 9.0 全栈技术的高效开源低代码平台(Vue3+Element-Plus)

前言 推荐一款基于.NET 9.0 全栈框架的新一代技术架构(Vue3+Element-Plus),开源低代码平台-Microi吾码。 平台不仅无限制地支持用户数、表单数、数据量及数据库数量,还通过跨平台兼容性实现了对多种开发语言的支持,并确保了在不同数据库间的无缝操作。 它还具备分布式部署…

Hula项目部署(桌面即时通讯应用程序)

后端项目部署: HuLaSpark/HuLa-Server: ☕️ HuLa 服务端,基于SpringBoot3 + Netty + MP + RocketMQ docker-compose.yml没有修改,有需要的话自行调整即可,我这里只是为了演示。 以下的命令在linux下运行,且windows可以直接访问 docker-compose up -d 直接拉取镜像启动存储…

linux核心命令

1、查询帮助命令 man ls help info2、文件和目录操作命令 ls # 仅了列出当前目录可见文件 ls -l # 列出当前目录可见文件详细信息 ls -hl # 列出相信信息并以可读大小显示文件大小 ls -al # 列出所有文件(包含隐藏)的详细信息 ls --human-r…

软工作业2-个人项目

项目地址 YiLaiL的个人项目 PSP表格PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 10 30 Estimate估计这个任务需要多少时间 10 30Development 开发 455 640 Analysis需求分析 (包括学习新技术) 30 120 Design Spec生成设计文…

Easyexcel(3-文件导出)

EasyExcel 是一个便捷、高效的Excel读写库,尤其在大数据量的文件导出场景中表现出色。其核心优势在于减少内存占用和提升数据处理速度,适合用于Java项目中大批量数据的导出。响应头设置 通过设置文件导出的响应头,可以自定义文件导出的名字信息等 //编码格式为UTF-8 respons…

天嵌通途xczu15eg学习笔记——PL端DDR4的MIG IP核配置及测试过程

首先这是PL端的DDR4芯片,型号为MT40A256M16GE-075E,256Mx16,即512MB,由于不能上传附件,所以PDF还请大家自行上网搜索下载。DDR4参数的获取参考了以下两个CSDN的博客。 https://ztzhang.blog.csdn.net/article/details/142444632 https://blog.csdn.net/apple_53311083/art…

ThingsPanel与ThingsBoard:深度对比与选型剖析

在物联网平台领域,ThingsPanel和ThingsBoard各有千秋,为助大家明晰二者差异、精准选型,以下将从多个核心维度展开深度解读:ThingsPanelThingsBoard一、开源协议与版本模式开源协议: ThingsPanel遵循AGPLv3.0协议。 ThingsBoard采用Apache2.0协议。 版本提供:二者均配备社…

2025 年开源替代方案为何正在取代 OutSystems?技术自由度与成本优势深度解析

2025 年企业为何转向开源?揭秘 OutSystems 四大痛点,推荐 NocoBase、Appsmith、Budibase 等开源方案,帮助你的团队实现技术自由+成本优势双赢。原文链接:https://www.nocobase.com/cn/blog/outsystems-open-source-alternatives OutSystems 的隐藏成本不只是金钱 OutSystem…

rocketmq引入版本不对的问题

原因是,公司电脑可以正常启动,自己的电脑启动报错,报错是缺少了这个类 之后查看版本发现对不上,公司的事4.9.7,自己上面的居然是5.1.4 然后去除版本指定版本,不知道是否有问题,反正启动没问题了,不过部署还是用公司电脑吧,怕出问题<dependency><groupId>o…

navicat如何导出数据?附navicat15安装包

前言 大家好,我是小徐啊。navicat是我们常用的数据库连接工具,其功能十分强大。可以说是我使用过的各个连接工具中,最强大的工具。今天,小徐就来介绍下如何在navicat里面导出数据。文末附navicat15获取方式。 如何导出数据 首先,打开navicat,然后连接我们要导出的数据库。…