最新要闻
- 2023年安卓之光!小米13 Ultra最新进展:还在打磨MIUI 14系统
- 焦点滚动:AMD Zen4低功耗锐龙7 7840U首次现身:28W就灭掉45W Zen3+
- 世界视点!南航重推“随心飞”产品:不限年龄无限飞行 服务器被挤爆
- 环球热点!推荐机制不再保密:马斯克宣布月底开放Twitter推荐算法
- P图侮辱女性 苏州大学凌晨通报:开除赵某某学籍
- 1254MB海量缓存+96核心!AMD霄龙9004X让对手彻底绝望
- 【全球聚看点】“密集恐惧症”真的是种病?看完也许会治好
- 每日快报!群晖DSM 7.2 Beta发布:Docker更名 相册大升级
- 焦点快播:诸葛亮的改动再度提上日程,诸葛亮真的需要这样调整吗?
- 今日热闻!独特的散热设计与人机交互触控屏!微星海皇戟X2主机评测:顶级游戏性能
- 【全球快播报】《你的名字。》导演新海诚新作!《铃芽之旅》预售票房突破3000万
- 天天微动态丨比亚迪智能手表亮相:一键控车 可完美替代车钥匙
- 买了电动牙刷 没想到越用牙越废
- 观天下!宝马X3变X6!男子买二手宝马X3买到全损事故车 退1赔3得97万
- 印度机长飞行中吃早餐 咖啡直接放在油门把手上!双双被罚
- 24层楼高!首艘国产大型邮轮预计年底交付:零件数是复兴号高铁13倍
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
每日速看!C. Sequence Master
C. Sequence Master
For some positive integer $m$, YunQian considers an array $q$ of $2m$ (possibly negative) integers good, if and only if for every possible subsequence of $q$ that has length $m$, the product of the $m$ elements in the subsequence is equal to the sum of the $m$ elements that are not in the subsequence. Formally, let $U=\{1,2,\ldots,2m\}$. For all sets $S \subseteq U$ such that $|S|=m$, $\prod\limits_{i \in S} q_i = \sum\limits_{i \in U \setminus S} q_i$.
Define the distance between two arrays $a$ and $b$ both of length $k$ to be $\sum\limits_{i=1}^k|a_i-b_i|$.
You are given a positive integer $n$ and an array $p$ of $2n$ integers.
(相关资料图)
Find the minimum distance between $p$ and $q$ over all good arrays $q$ of length $2n$. It can be shown for all positive integers $n$, at least one good array exists. Note that you are not required to construct the array $q$ that achieves this minimum distance.
Input
The first line contains a single integer $t$ ($1\le t\le 10^4$) — the number of test cases. The description of test cases follows.
The first line of each test case contains a single integer $n$ ($1\le n\le 2\cdot10^5$).
The second line of each test case contains $2n$ integers $p_1, p_2, \ldots, p_{2n}$ ($|p_i| \le 10^9$).
It is guaranteed that the sum of $n$ over all test cases does not exceed $2\cdot 10^5$.
Output
For each test case, output the minimum distance between $p$ and a good $q$.
Example
input
416 921 2 2 12-2 -2 2 24-3 -2 -1 0 1 2 3 4
output
32513
Note
In the first test case, it is optimal to let $q=[6,6]$.
In the second test case, it is optimal to let $q=[2,2,2,2]$.
解题思路
首先直觉上就会觉得满足条件的$q$数量会很少,同时可以发现$q = [ \ \overbrace{0,0,\ldots,0}^{2n} \ ]$一定是满足条件的,因此对于$\forall n \in \mathbb{Z}$,总是存在一个$q$,即一定有解。我们接下来再考虑是否存在其他满足条件的$q$。
先考虑$q$中所有元素都相同的情况。
很明显当$n=1$的情况,必然会有$q_1 = q_2$,可以等于任意值。
当$n=2$,假设每个元素都为$x$,那么必然会有$x^n = n \cdot x \ \Rightarrow \ x = \sqrt[n-1]{n} = 2$。同时根据该等式,很明显当$n > 2$时等式不存在正整数解。
因此只有当$n=1$或$n=2$,才存在除了全$0$以外所有元素都相同的$q$。
接下来考虑$q$中所有元素不都相同的情况,先考虑$n$为偶数的情况。
由于此时$q$中至少存在两个元素不同,不妨假设$q_1 \ne q2$。满足等式$$\begin{cases} q_1\cdot q_3q_4\cdots q_{n+1}=q_2+q_{n+2}+q_{n+3}+\cdots+q_{2n} \ \ \ \ \ \ \ (1) \\\\ q_2\cdot q_3q_4\cdots q_{n+1}=q_1+q_{n+2}+q_{n+3}+\cdots+q_{2n}\ \ \ \ \ \ \ (2)\end{cases}$$
$(1)-(2)$得到$$(q_1-q_2)q_3q_4\cdots q_{n+1}=q_2-q_1 \ \Rightarrow \ (q_1-q_2)(q_3q_4\cdots q_{n+1}+1)=0$$
由于$q_1 \ne q_2$,因此必然有$q_3q_4\cdots q_{n+1}+1 = 0$,即$q_3q_4\cdots q_{n+1} = -1$。由于$q_i \in\mathbb{Z}$,有奇数个$q_i$连乘,故只能有$q_i = -1$。
同理我们考虑其他类似的约束条件,即$U=\{3, 4, \ldots, 2n\}$,对于$U$所有满足$|S| = n-1$的子集$S \subseteq U$,有$$\begin{cases} q_1 \cdot \prod\limits_{i \in S} q_i = q_1 + \sum\limits_{i \in U \setminus S} q_i \\\\ q_2 \cdot \prod\limits_{i \in S} q_i = q_2 + \sum\limits_{i \in U \setminus S} q_i \end{cases}$$
就可以发现$q_3=q_4=\cdots =q_{2n} = -1$,把结果代入$(1)$式,就会得到$q_1+q_2=n-1$。同时又因为$q_1q_2\cdots q_n=q_{n+1}+\cdots q_{2n}$,因此有$q_1q_2=-n$。这样就可以解得$\{q_1,q_2\}=\{-1,n\}$。
即对于$n$为偶数的情况,我们可以构造出$q= [ \ \overbrace{-1,-1,\ldots,-1}^{2n-1}, \ n \ ]$。
那么对于$n$为奇数的情况呢?与上面的推导过程一样,最后得到$q_3q_4\cdots q_{n+1} = -1$,由于$q_i \in\mathbb{Z}$,此时有偶数个$q_i$连乘,很明显此时没有解。
故只有当$2 \mid n$,有$q= [ \ \overbrace{-1,-1,\ldots,-1}^{2n-1}, \ n \ ]$。
接下来我们只需要针对$n$来分类讨论取最小值就可以了:
- 先考虑$q$中元素均为$0$的情况,此时最小值为$\text{ans} = \sum\limits_{i=1}^{2n}{|p_i|}$。
- 如果$n=1$,为了得到最小值构造$q = [p_1, p_1]$或$q = [p_2, p_2]$,那么就有$\text{ans} = \min\left\{ \text{ans}, \ |p_1 - p_2| \right\}$。
- 如果$n=2$,构造$q = [2,2,2,2]$,那么就有$\text{ans} = \min\left\{ \text{ans}, \ \sum\limits_{i=1}^{4}{|p_i - 2|} \right\}$。
- 最后如果$2 \mid n$,构造$q= [ \ \overbrace{-1,-1,\ldots,-1}^{2n-1}, \ n \ ]$。对$p$从小到大排序,那么就有$\text{ans} = \min\left\{ \text{ans}, \ \sum\limits_{i=1}^{2n}{|p_i - q_i|} \right\}$。
关于上面的第$4$步,如果有序列$p$和$q$,定义两个序列的距离为$\sum\limits_{i=1}^{n}{|p_i-q_i|}$。如果可以任意排列两个序列的元素,那么当$p$和$q$均满足非递减顺序时,即$p_1 \leq p_2 \leq \cdots \leq p_n$,$q_1 \leq q_2 \leq \cdots \leq q_n$,此时距离能够取到最小值,证明见附录部分。
AC代码如下,时间复杂度为$O(n \log{n})$:
1 #include2 using namespace std; 3 4 typedef long long LL; 5 6 const int N = 4e5 + 10; 7 8 int a[N]; 9 10 void solve() {11 int n;12 scanf("%d", &n);13 n *= 2;14 LL ret = 0;15 for (int i = 0; i < n; i++) {16 scanf("%d", a + i);17 ret += abs(a[i]);18 }19 if (n == 2) {20 ret = min(ret, (LL)abs(a[0] - a[1]));21 }22 else if (n == 4) {23 LL s = 0;24 for (int i = 0; i < n; i++) {25 s += abs(a[i] - 2);26 }27 ret = min(ret, s);28 }29 if (n / 2 % 2 == 0) {30 sort(a, a + n);31 LL s = abs(a[n - 1] - n / 2);32 for (int i = 0; i < n - 1; i++) {33 s += abs(a[i] + 1);34 }35 ret = min(ret, s);36 }37 printf("%lld\n", ret);38 }39 40 int main() {41 int t;42 scanf("%d", &t);43 while (t--) {44 solve();45 }46 47 return 0;48 }
其中对于第$4$步,由于$q$中只有一个元素是$n$,其余的元素都是$-1$,因此我们可以枚举$p$中哪个元素与$n$求差。定义$s = \sum\limits_{i=1}^{2n}{|p_i+1|}$,那么如果$p_k$与$n$作差,就有$\sum\limits_{i=1}^{n}{|p_i-q_i|} = s - |p_k+1| + |p_k-n|$。
AC代码如下,时间复杂度为$O(n)$:
1 #include2 using namespace std; 3 4 typedef long long LL; 5 6 const int N = 4e5 + 10; 7 8 int a[N]; 9 10 void solve() {11 int n;12 scanf("%d", &n);13 n *= 2;14 LL ret = 0;15 for (int i = 0; i < n; i++) {16 scanf("%d", a + i);17 ret += abs(a[i]);18 }19 if (n == 2) {20 ret = min(ret, (LL)abs(a[0] - a[1]));21 }22 else if (n == 4) {23 LL s = 0;24 for (int i = 0; i < n; i++) {25 s += abs(a[i] - 2);26 }27 ret = min(ret, s);28 }29 if (n / 2 % 2 == 0) {30 LL s = 0;31 for (int i = 0; i < n; i++) {32 s += abs(a[i] + 1);33 }34 for (int i = 0; i < n; i++) {35 ret =min(ret, s - abs(a[i] + 1) + abs(a[i] - n / 2));36 }37 }38 printf("%lld\n", ret);39 }40 41 int main() {42 int t;43 scanf("%d", &t);44 while (t--) {45 solve();46 }47 48 return 0;49 }
附录
有序列$p$和$q$,定义两个序列的距离为$\sum\limits_{i=1}^{n}{|p_i-q_i|}$,序中的元素可以任意重新排序。证明当满足$p_1 \leq p_2 \leq \cdots \leq p_n$,$q_1 \leq q_2 \leq \cdots \leq q_n$时,两个序列的距离取到最小值。
不妨固定$p$,使得$p_1 \leq p_2 \leq \cdots \leq p_n$。同时$q$不满足$q_1 \leq q_2 \leq \cdots \leq q_n$,因此至少存在一对$q_i$和$q_j$,满足$q_i \geq q_j$且$i < j$。
如果$q_i = q_j$,仅考虑$i, \ j$两个位置对距离的贡献,那么很明显不管是否交换$p_i$和$p_j$,$i, \ j$两个位置对距离的贡献都相同,因此我们只考虑$q_i > q_j$,且$p_i < p_j$的情况。
接下来证明通过交换$q_i$和$q_j$,能够使得$i, \ j$两个位置对距离的贡献减少。为此我们假设$p_i = a, \ p_j = b, \ q_i = d, \ q_j = c$,同时有$a < b, \ c < d$。
分情况讨论:
$1.$$b \leq c$,即$a < b \leq c < d$:
交换$c$和$d$前,距离为$|a - d| + |b - c| = d - a + c - b$,交换$c$和$d$后,有$d < c$,距离就变成了$|a - c| + |b - d| = c - a + d - b$。交换前减去交换后得到$d - a + c - b - (c - a + d - b) = 0$,即交换后的距离不变。
$2.$$a \leq c < b$:
$2.1.$$b \leq d$,即$a \leq c < b \leq d$:
交换$c$和$d$前,距离为$|a - d| + |b - c| = d - a + b - c$,交换$c$和$d$后,有$d < c$,距离就变成了$|a - c| + |b - d| = c - a + d - b$,用交换前的距离减去交换后的距离,得到$d - a + b - c- (c - a + d - b) = 2(b - c) > 0$,即交换后的距离变小。
$2.2.$$b > d$,即$a \leq c < d < b$:
交换$c$和$d$前,距离为$|a - d| + |b - c| = d - a + b - c$,交换$c$和$d$后,有$d < c$,距离就变成了$|a - c| + |b - d| = c - a + b - d$,用交换前的距离减去交换后的距离,得到$d - a + b - c- (c- a + b - d) = 2(d - c) > 0$,即交换后的距离变小。
$3.$$c < a$:
$3.1.$$b \leq d$,即$c < a < b \leq d$:
交换$c$和$d$前,距离为$|a - d| + |b - c| = d - a + b - c$,交换$c$和$d$后,有$d < c$,距离就变成了$|a - c| + |b - d| = a - c + d - b$,用交换前的距离减去交换后的距离,得到$d - a + b - c- (a - c+ d - b) = 2(b - a) > 0$,即交换后的距离变小。
$3.2.$$a \leq d < b$,即$c < a \leq d < b$:
交换$c$和$d$前,距离为$|a - d| + |b - c| = d - a + b - c$,交换$c$和$d$后,有$d < c$,距离就变成了$|a - c| + |b - d| = a - c + b - d$,用交换前的距离减去交换后的距离,得到$d - a + b - c- (a - c + b - d) = 2(d - a) \geq 0$,即交换后的距离变小。
$3.2.$ $d < a$,即$c < d < a < b$:
交换$c$和$d$前,距离为$|a - d| + |b - c| = a - d + b - c$,交换$c$和$d$后,有$d < c$,距离就变成了$|a - c| + |b - d| = a - c + b - d$,用交换前的距离减去交换后的距离,得到$a - d + b - c - (a - c + b - d) = 0,即交换后的距离不变。
综上所述,如果序列$p$满足$p_1 \leq p_2 \leq \cdots \leq p_n$,对于序列$q$如果存在$q_i$和$q_j$满足$q_i > q_j$且$i < j$,那么交换$q_i$和$q_j$能使得距离变小。为了使得距离最小,最终$q$一定满足$q_1 \leq q_2 \leq \cdots \leq q_n$。
定理得证。
同时可以推导得到当序列$p$和$q$满足$p_1 \leq p_2 \leq \cdots \leq p_n$,$q_1 \geq q_2 \geq \cdots \geq q_n$时,两个序列的距离取到最大值。
参考资料
Codeforces Round #858 (Div. 2) Editorial:https://codeforces.com/blog/entry/114048
关键词:
-
每日速看!C. Sequence Master
C SequenceMasterForsomepositiveinteger$m$,YunQianconsidersanarray$q$of$2m$(possiblyn
来源: 环球看热讯:MySQL如何正确查询字符串长度
每日速看!C. Sequence Master
2023年安卓之光!小米13 Ultra最新进展:还在打磨MIUI 14系统
焦点滚动:AMD Zen4低功耗锐龙7 7840U首次现身:28W就灭掉45W Zen3+
世界视点!南航重推“随心飞”产品:不限年龄无限飞行 服务器被挤爆
全球微资讯!看看这份2023年MySQL终级面试题,提升你的内力,给你面试助力
环球热点!推荐机制不再保密:马斯克宣布月底开放Twitter推荐算法
P图侮辱女性 苏州大学凌晨通报:开除赵某某学籍
.NET中的winform、wpf、winui和maui你都知道吗?
1254MB海量缓存+96核心!AMD霄龙9004X让对手彻底绝望
【全球聚看点】“密集恐惧症”真的是种病?看完也许会治好
每日快报!群晖DSM 7.2 Beta发布:Docker更名 相册大升级
焦点快播:诸葛亮的改动再度提上日程,诸葛亮真的需要这样调整吗?
今日热闻!独特的散热设计与人机交互触控屏!微星海皇戟X2主机评测:顶级游戏性能
【全球快播报】《你的名字。》导演新海诚新作!《铃芽之旅》预售票房突破3000万
天天微动态丨C++ | 运算符重载
每日快播:BUUCTF-MISC-面具下的flag(vmdk的解压和Brainfuck与Ook解密)
天天微动态丨比亚迪智能手表亮相:一键控车 可完美替代车钥匙
买了电动牙刷 没想到越用牙越废
观天下!宝马X3变X6!男子买二手宝马X3买到全损事故车 退1赔3得97万
印度机长飞行中吃早餐 咖啡直接放在油门把手上!双双被罚
看New Bing回答世纪难题:女友和妈妈掉水里先救谁
24层楼高!首艘国产大型邮轮预计年底交付:零件数是复兴号高铁13倍
环球热点评!xj威客网可信不_xj威客网
全球热点评!暴雪火速排查《暗黑4》排队问题
天天讯息:别等降价了!长城坦克推全年保价政策 年底前官降返差价
全球快资讯丨《名侦探柯南》里出现九转大肠厨师和评委:网友直呼瞬间出戏
环球简讯:知名车评人吐槽宝马漏机油养活他家修理厂 原因直指塑料气门室盖
【世界热闻】探究C# dynamic动态类型本质
天天新资讯:郭帆谈《流浪地球2》“50岁以上出列”拍摄:喊停了外国群演还在哭
全球短讯!给蚊子送上夏天第一拍!雅格电蚊拍大促:10.9元到手
今日要闻!迪士尼正版授权 泰国乳胶凉席三件套大促!原价190 券后90
检查 Linux 系统是运行在虚拟机上还是物理机上
远大前程多少集_远大前程介绍
全球热资讯!《寂静岭2:重制版》美术谈护士穿丝袜:曾被指责皮肤暴露
最尴尬的新造车:称车主可活100岁 碰撞测试得分0
50吨!山东探获一大型金矿床:服务年限可达20年以上
世界视点!读Java性能权威指南(第2版)笔记21_垃圾回收H
优化利器In-Memory开启和效果
全球关注:谈谈 Vue toRef 和 reactive
天天报道:博主带卷尺吃披萨发现尺寸不够:99元12寸披萨直径少2.5厘米
女子称点外卖备注送上楼被骑手教育:四块钱还想让送上楼
三亚骂游客导游被吊销导游证罚款5万:网友点赞 低价团慎重参与
重庆东站一项目招标条件被指“量身定做”:招标人答疑,公管局正处理投诉
mysql 索引(InnoDB)
环球关注:快速带你入门css
世界热门:Git常用命令总结
环球热门:马龙樊振东会师决赛:国乒包揽大满贯5冠
当前热议!俞敏洪谈野生虾事件:犯了错误 就要去改正
世界最资讯丨情侣称住41层酒店被“玻璃人”看光引热议:网友支持酒店已提示
热文:数据安全始终是一个不可忽视的问题
世界最资讯丨数据结构-绪论
全球讯息:职工医保报销比例2022_职工医保报销比例
全球观点:OpenAI CEO谈GPT4:人类迄今开发的最伟大技术 有点害怕了
即时:曹曦月方否认带货3个月成交278元:拿证据说话
希尔排序、快速排序、KMP算法
环球热推荐:008爬虫之短短20行代码下载周杰伦所有歌曲
一次 Hyperf 注解失效问题分析
全球看热讯:Qt+百度AI文字识别OCR小工具
国内外多名大胃王意外死亡 有人胖到320斤有人开播前突然昏迷:专家科普
热点在线丨2023省选16天
著名的Breach黑客论坛管理员被捕
环球微头条丨男子整形后称没法靠颜值吃饭了:丢了工作
《暗黑4》公测性能实测:RTX 4090显卡流畅跑8K
世界短讯!SSL/TLS协议运行机制的概述
最新资讯:重学c#系列—— explicit、implicit与operator[三十四]
世界要闻:李彦宏谈文心一言:市场反馈符合预期 股价波动没必要解释
焦点滚动:挺能藏啊!男子电动滑板车藏84个SSD入境被海关查获
【天天快播报】webpack原理(2):ES6 module在Webpack中如何Tree-shaking构建
CTF show 信息收集篇
Quicker 快速开发,控制脚本关闭(示例,鼠标连点器)
天天微头条丨卡佩罗:那不勒斯和国米将晋级 迈尼昂和奥纳纳是米兰双雄的关键
每日观点:曹姓明星收20万带货3月成交278元 被判退还13.9万:要量力而行
13代酷睿躺赢了 4nm锐龙7000跳票:此前规格被砍2刀
已知球面经纬度求方位角和反方位角(awk一行代码实现)
环球观热点:《流浪地球2》门框机器人科幻十足 设计师详解:还能晾衣服能甩干
东北首条海下/跨海地铁!大连地铁5号线正式运营
世界热讯:Linux学习笔记
报道:插件化架构设计(2):插件化从设计到实践该考量的问题汇总
【天天新要闻】Vins 前端中高效的去畸变的方式解析
动态焦点:暴雪:《暗黑》系列能成功多亏了韩国玩家热情和爱戴
全球观点:朱雀二号遥一运载火箭发射失利:已查明飞行故障 通过归零评审
全球热头条丨《雷霆沙赞2》豆瓣开分6.5:加朵女神加分、剧情被批幼稚低级
【全球独家】万字血书Vue—Vue的核心概念
张兰被曝国外欠债9.8亿,海外家庭信托被追债,拼命带货疑为还债
Ocelot使用与设置路由Routing
环球速递!arthas排查线上问题真是太好用了!
肯德基全家桶被曝吃出生的炸鸡!店家回应是锅出现故障
世界快播:C++ class struct
环球视点!Windows OpenGL ES 图像 GPUImageLookupFilter
世界观速讯丨8万元会成爆款吗?宝骏悦也实车曝光:像吉姆尼、能跑303公里
每日热文:印度男子因新娘高三成绩不好要求退婚 还要退5千彩礼:网友看笑
世界观焦点:CSS学习笔记
热门看点:女生被拍同学勇敢对峙让男子删除 想保护好自己的朋友:网友称赞勇敢
1.5mm!iPhone 15 Pro Max将打破最薄边框纪录:CAD外观渲染图曝光 更帅了
全球微头条丨没有科技与狠活 :依能天然苏打水2.3元发车 无糖无气0卡
03月18日09时福建漳州疫情数据 阳了以后为什么会腰疼?应该怎么办?
当前要闻:为什么文件删除了但磁盘空间没有释放?
微博图床被废,自己动手丰衣足食。
【聚看点】Source Generator初探