ARC169D 做题记录

news/2024/10/11 22:04:11

link

假定 \(a_{1\sim n}\) 不对 \(n\) 取模,设最终状态为 \(b_{1\sim n}\),令 \(S = \sum\limits_{i = 1} ^ n (b_i - a_i)\),应满足以下条件:

  • \(b_i \bmod n\) 两两不同

  • \(m | S\)

  • \(\max\limits_{i = 1} ^ n (b_i - a_i)\)

先对 \(a\) 排序,那么可以发现最优情况下 \(b\) 也是有序的。

  • 再一个结论:\((b_1,b_2,\cdots, b_n) = (x, x + 1, \cdots, x + n - 1)\)

考虑调整法,如果 \(b_1 + n\le b_n\),令 \(b_1' = b_n - n,\ b_n' = b_1 + n\) 再排序,依然满足条件。

那么我们需要令 \(x\) 最小,枚举即可。

  • 启示:不取模避免环的讨论,转化为其他条件。
点击查看代码
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define mkp make_pair
#define pir pair <ll, ll>
#define pb emplace_back
#define i128 __int128
void rd(ll &x) {char ch;while(!isdigit(ch = getchar())) ;x = ch - '0';while(isdigit(ch = getchar()))x = (x << 1) + (x << 3) + ch - '0';
}
using namespace std;
const ll maxn = 5e5 + 10, inf = 1e18;
ll n, m, a[maxn], w, ret, sum;
multiset <ll> st;
int main() {scanf("%lld%lld", &n, &m); w = n * (n - 1) / 2;for(ll i = 1; i <= n; i++)scanf("%lld", a + i), w -= a[i];w = (w % n + n) % n; ll stp = -1;for(ll i = 0; i < n; i++)if(i * m % n == w) { stp = i; break; }if(stp == -1) { puts("-1"); return 0; }sort(a + 1, a + 1 + n); ll d = 0;for(ll i = 1; i <= n; i++)d = max(d, a[i] - i + 1);for(ll i = 1; i <= n; i++) {sum += i - 1 + d - a[i];ret = max(ret, i - 1 + d - a[i]);}while(sum % m)sum += n, ++ret;ll g = m / __gcd(n, m);while(sum < ret * m)sum += n * g, ret += g;printf("%lld", sum / m);return 0;
}

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

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

相关文章

mac安装ps2023

花了5毛钱从网上找的资源下载的,真累啊,找了好久 https://www.123pan.com/s/65fKVv-fekWA 1、安装时提示error2、包内容中打开install2、错误码501安装错误原因:Mac系统缺少ACC云运行框架,导致安装报错! 3、错误码81adobe create clould 退出登录账号;

密码学承诺之原理和应用 - Kate多项式承诺

主页微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ GIT地址:https://github.com/warm3snow简介 多项式承诺是一种实用性比较强的密码学承诺方案,允许一个方(承诺者)向另一个方(验证者)承诺一个多项式的值,而不泄露多项式的具体形式。…

线段树分治略解杂题解析

可能做到好题之后会再更新吧。 总叙 线段树与离线询问结合技巧又被称为线段树分治。 使用线段树分治维护的信息通常会在某一个时间段内出现,要求在离线的前提下回答某一个时刻的信息并,则可以考虑使用线段树分治的技巧。 以下是线段树分治的基本模板: change 将信息按时间段…

多校A层冲刺NOIP2024模拟赛05

A. 好数(number) 很容易想到 \(n^3\) 枚举两个,看第三个是否出现,扩展一下,枚举一个,看剩下需要的和是否出现过,提前处理出两两的和 和最早能合出这个数的位置,复杂的 \(O(n^2)\)点击查看代码 #include<bits/stdc++.h> const int maxn=5000+10; using namespace …

二分图全面学习笔记

二分图全面学习笔记 Part1:二分图的定义与判定方法 首先,我们要知道二分图的定义是什么。 二分图的定义 ​ 如果一张无向图的 \(n\) 个节点可以分成 \(A,B\) 两个不相交的非空集合,并且同一个集合之中的两个点之间没有边相连接,那么称该无向图为二分图 (Bipartite Graph) …

解密prompt系列40. LLM推理scaling Law

OpenAI的O-1出现前,其实就有大佬开始分析后面OpenAI的技术路线,其中一个方向就是从Pretrain-scaling,Post-Train-scaling向Inference Scaling的转变,这一章我们挑3篇inference-scaling相关的论文来聊聊,前两篇分别从聚合策略和搜索策略来优化广度推理,最后一篇全面的分析…

浅谈一类动态开点线段树优化 - DEST树

前言 线段树,是一种优秀的数据结构,其应用极为广泛。其中,动态开点值域线段树,配合上线段树合并,甚至能替代或超越平衡树。但是,这种线段树的树高与值域相关,很容易产生四五倍常数。无论考虑时间或空间复杂度,这样的树都不算优。那么,我们是否能想办法优化它呢? 优化…

『模拟赛』多校A层冲刺NOIP2024模拟赛05

『模拟赛记录』多校A层冲刺NOIP2024模拟赛05Rank 烂。A. 好数(number) 签,唐,没签上。 考虑之前几次类似的题方法都是选 \(k-1\) 的方案存起来以使总复杂度除以一个 \(n\),故考虑记共 \(n^2\) 个两两组合之和,枚举当前点 \(i\) 前面的点,找是否有值为它们的差的组合,复…