当前位置: 首页 > news >正文

华黎卡的排列构造

华黎卡的排列构造 

题目描述

华黎卡有一个长度为 $n$ 的神秘排列 $p$。记 $S_k = \sum_{i=1}^k {p_i}$,如果对于所有的 $1 \leq i \leq n$,$S_i$ 都能被$p_i$整除,那么排列 $p$ 被称为 好排列

要判断一个排列是不是 好排列 实在是太容易了,华黎卡可不会喜欢做这么容易的事,所以华黎卡专门为你出了另外一个问题:

给定一个正整数 $n$,你需要构造一个长度为 $n$ 的排列 $p$,使得这个排列是 好排列。你需要判断这样的排列是否存在。另外地,如果这样的排列存在,请输出任意一个满足条件的排列。

【名词解释】一个长度为 $n$ 的排列是一个包含 $n$ 个整数的序列,其中 $1$ 到 $n$ 的每个整数恰好出现一次。例如,$[2,3,1,5,4]$ 是一个排列,而 $[1,2,2]$ 不是($2$ 出现了两次),$[1,3,4]$ 也不是($n=3$ 但出现了 $4$)。

输入描述:

第一行包含一个整数 $t$($1 \leq t \leq 10^4$),表示测试用例的组数。

接下来 $t$ 行,每行包含一个整数 $n$($1 \leq n \leq 5 \times 10^5$),表示你需要构造的排列的长度。

数据保证所有测试用例中 $n$ 的总和不超过 $10^6$。

输出描述:

对于每组测试数据,输出一个字符串,表示能否构造出这样的排列。如果能,输出 $\mathtt{YES}$,否则输出 $\mathtt{NO}$。

如果能构造出这样的排列,请在第二行输出任意一个满足条件的排列。

请注意,答案的输出区分大小写。

示例1

输入

3
1
3
4

输出

YES
1
YES
2 1 3
YES
3 1 4 2

 

解题思路

  傻逼构造题,整场比赛就这题做不出来,打表都找不出规律,评价是糖完了。

  这题就是要打表才能做的,除非你注意力十分惊人,我直接给你跪了 orz。打表结果如下:

打表
n=1:
1n=2:
2 1n=3:
2 1 3
3 1 2n=4:
3 1 4 2
4 2 3 1n=5:
3 1 4 2 5
4 1 5 2 3
4 2 3 1 5
5 1 2 4 3n=6:
4 1 5 2 6 3
4 2 6 3 5 1
5 1 2 4 6 3
5 1 6 4 2 3
6 2 4 3 5 1n=7:
4 1 5 2 6 3 7
4 2 6 3 5 1 7
5 1 2 4 6 3 7
5 1 6 2 7 3 4
5 1 6 4 2 3 7
6 2 4 3 5 1 7
7 1 2 5 3 6 4n=8:
5 1 6 2 7 3 8 4
7 1 2 5 3 6 8 4
8 2 5 3 6 4 7 1
8 4 2 7 3 1 5 6
8 4 2 7 3 6 5 1
8 4 3 5 1 7 2 6
8 4 6 3 7 2 5 1n=9:
5 1 6 2 7 3 8 4 9
6 1 7 2 8 3 9 4 5
6 2 1 9 3 7 4 8 5
6 3 9 2 1 7 4 8 5
7 1 2 5 3 6 8 4 9
7 1 4 6 9 3 2 8 5
7 1 8 2 6 3 9 4 5
7 1 8 2 9 3 6 4 5
8 1 9 2 4 6 5 7 3
8 1 9 3 7 2 6 4 5
8 1 9 6 4 2 5 7 3
8 1 9 6 4 7 5 2 3
8 2 5 3 6 4 7 1 9
8 4 2 7 3 1 5 6 9
8 4 2 7 3 6 5 1 9
8 4 3 5 1 7 2 6 9
8 4 6 3 7 2 5 1 9
8 4 6 9 1 2 5 7 3
8 4 6 9 1 7 5 2 3
8 4 6 9 3 5 7 2 1
9 1 2 4 8 6 5 7 3
9 1 2 6 3 7 4 8 5
9 3 4 8 6 5 7 2 1
9 3 6 2 1 7 4 8 5n=10:
6 1 7 2 8 3 9 4 10 5
6 2 1 9 3 7 4 8 10 5
6 2 8 4 10 5 7 3 9 1
6 3 9 2 1 7 4 8 10 5
7 1 4 6 9 3 2 8 10 5
7 1 4 6 9 3 10 8 2 5
7 1 8 2 6 3 9 4 10 5
7 1 8 2 9 3 6 4 10 5
7 1 8 4 10 6 9 3 2 5
8 1 9 3 7 2 6 4 10 5
8 2 10 4 3 9 6 7 1 5
8 2 10 4 6 5 7 3 9 1
8 4 2 7 3 6 10 5 9 1
8 4 6 2 10 5 7 3 9 1
8 4 6 3 7 2 10 5 9 1
8 4 6 9 3 10 2 7 1 5
9 1 2 6 3 7 4 8 10 5
9 3 4 8 6 10 2 7 1 5
9 3 6 2 1 7 4 8 10 5
10 2 4 8 3 9 6 7 1 5
10 2 4 8 6 5 7 3 9 1
10 2 6 3 7 4 8 5 9 1n=11:
6 1 7 2 8 3 9 4 10 5 11
6 2 1 9 3 7 4 8 10 5 11
6 2 8 4 10 5 7 3 9 1 11
6 3 9 2 1 7 4 8 10 5 11
7 1 4 6 9 3 2 8 10 5 11
7 1 4 6 9 3 10 8 2 5 11
7 1 8 2 6 3 9 4 10 5 11
7 1 8 2 9 3 6 4 10 5 11
7 1 8 2 9 3 10 4 11 5 6
7 1 8 4 2 11 3 9 5 10 6
7 1 8 4 10 6 9 3 2 5 11
8 1 9 3 7 2 6 4 10 5 11
8 1 9 3 7 2 10 4 11 5 6
8 2 10 4 3 9 6 7 1 5 11
8 2 10 4 6 5 7 3 9 1 11
8 4 2 7 1 11 3 9 5 10 6
8 4 2 7 3 6 10 5 9 1 11
8 4 6 2 10 5 7 3 9 1 11
8 4 6 3 7 2 10 5 9 1 11
8 4 6 9 3 10 2 7 1 5 11
9 1 2 6 3 7 4 8 10 5 11
9 3 4 8 6 10 2 7 1 5 11
9 3 6 2 1 7 4 8 10 5 11
10 1 11 2 4 7 5 8 6 9 3
10 2 4 8 3 9 6 7 1 5 11
10 2 4 8 6 5 7 3 9 1 11
10 2 6 3 7 4 8 5 9 1 11
11 1 2 7 3 8 4 9 5 10 6
11 1 4 8 6 10 5 9 2 7 3

  然而还是要注意力才能找到其中的规律,tmd 我卡了一个多小时都看不出来,这辈子有了,好似喵。

  注意到每个 $n$ 都有类似的排列形式:$$\begin{array}{|c|l|} \hline n & \text{permutation} \\ \hline 1 & 1 \\ \hline 2 & 2 \, 1 \\ \hline 3 & 2 \, 1 \, 3 \\ \hline 4 & 3 \, 1 \, 4 \, 2 \\ \hline 5 & 3 \, 1 \, 4 \, 2 \, 5 \\ \hline 6 & 4 \, 1 \, 5 \, 2 \, 6 \, 3 \\ \hline 7 & 4 \, 1 \, 5 \, 2 \, 6 \, 3 \, 7 \\ \hline 8 & 5 \, 1 \, 6 \, 2 \, 7 \, 3 \, 8 \, 4 \\ \hline 9 & 5 \, 1 \, 6 \, 2 \, 7 \, 3 \, 8 \, 4 \, 9 \\ \hline 10 & 6 \, 1 \, 7 \, 2 \, 8 \, 3 \, 9 \, 4 \, 10 \, 5 \\ \hline 11 & 6 \, 1 \, 7 \, 2 \, 8 \, 3 \, 9 \, 4 \, 10 \, 5 \, 11 \\ \hline \end{array}$$

  可以总结出排列在奇偶位置上的填数规律(下标从 $1$ 开始),有 $p_i = \begin{cases} \lfloor\frac{n}{2}\rfloor + \frac{i+1}{2}, &i\text{ 是奇数} \\ \frac{i}{2}, &i\text{ 是偶数} \end{cases}$。由此可得 $$S_i = \sum_{j=1}^{i}{p_j} = \begin{cases} \sum\limits_{j=1}^{(i+1)/2}{\left(\lfloor\frac{n}{2}\rfloor + j\right)} + \sum\limits_{j=1}^{(i-1)/2}{j}, &i\text{ 是奇数} \\ \sum\limits_{j=1}^{i/2}{\left(\lfloor\frac{n}{2}\rfloor + j\right)} + \sum\limits_{j=1}^{i/2}{j}, &i\text{ 是偶数} \end{cases} = \begin{cases} \left(\lfloor\frac{n}{2}\rfloor + \frac{i+1}{2}\right)\frac{i+1}{2} , &i\text{ 是奇数} \\ \frac{i}{2}\left(\lfloor\frac{n}{2}\rfloor+\frac{i}{2}+1\right), &i\text{ 是偶数} \end{cases}$$

  可以发现,无论 $i$ 是奇数还是偶数,该构造方案总是满足 $p_i \mid S_i$。因此,对于任意 $n$,我们都能构造出满足条件的排列。

  AC 代码如下,时间复杂度为 $O(n)$:

#include <bits/stdc++.h>
using namespace std;typedef long long LL;void solve() {int n;cin >> n;cout << "YES\n";for (int i = 1; i <= n; i++) {if (i & 1) cout << n / 2 + (i + 1) / 2 << ' ';else cout << i / 2 << ' ';}cout << '\n';
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

 

参考资料

  Whalica Cup (Round 2) 题解:https://uploadfiles.nowcoder.com/files/20260215/374967423_1771149708366/WhalicaCupRound2tutorial.pdf

http://www.jsqmd.com/news/387703/

相关文章:

  • 2026年海外GEO系统优化推广服务商Top 5揭晓:谁在真正驱动中国品牌出海? - 深圳昊客网络
  • AI元人文:界面东西——在诗性与逻各斯间
  • 我的算法修炼之路--8——预处理、滑窗优化、前缀和哈希同余,线性dp,图+并查集与逆向图 - 指南
  • JVM学习笔记:第三章——运行时数据区(部分)
  • 自助建站系统哪个好?自助建站软件选哪个好 - 码云数智
  • vue3微信小程序Nodejs无人机监控管理平台设计与实现
  • 小程序快速开发平台有哪些?小程序第三方开发平台推荐 - 码云数智
  • 基于SpringBoot和Vue的校园在线拍卖高效的系统设计与搭建
  • nodejs+Vue3+AI算力资源网上商城系统的设计与实现
  • 从Cyberhub到Aram Nagar:一个理性与创意兼具之人的内心漫游
  • 如何创建自己的微信小程序呢? - 码云数智
  • 零基础如何快速制作自己的公司网站呢? - 码云数智
  • 会员卡充值消费系统怎么做 - 码云数智
  • 小程序开发需要多少钱?小程序开发方式及费用 - 码云数智
  • 如何开发在线培训课程平台,知识付费小程序怎么做 - 码云数智
  • 会员管理系统软件哪个好?主流软件核心优势与适用场景 - 码云数智
  • 微信小程序会员管理系统怎么做 - 码云数智
  • USB TYPC-C做USB2.0使用
  • 实用指南:window雷池WAF安装运行文档
  • 企业网站怎么建立,如何给自己的公司建网站 - 码云数智
  • 小程序商城哪个平台好?小程序商城制作平台对比 - 码云数智
  • 微信商城小程序怎么弄,电商小程序搭建流程 - 码云数智
  • 题解:CF2195E
  • 2026SaaS小程序制作平台及其核心特点、价格与适用场景 - 码云数智
  • 微信小程序怎么制作自己的小程序 - 码云数智
  • C++初学的常见问题 之二
  • 普通人如何杀入AI赛道?(附岗位薪资与避坑指南)收藏这份AI转行指南,轻松入局高薪赛道!
  • DeepSeek V4“泄露”性能惊艳:编码数学双封神,程序员必看收藏!
  • 制造企业研发管理体系化升级与数字化转型落地建议书 - 指南
  • 携程任我行礼品卡回收,宅家几分钟轻松变现不用跑腿 - 京顺回收