首先,我们需要明确一点,对于一个排列中的相邻两项,它们的和要是 p 的倍数,那么它们的差也要是 p 的倍数。

我们可以设排列为 a1, a2, a3, ..., an。对于相邻的两项 ai 和 ai+1,如果它们的和 ai + ai+1 是 p 的倍数,那么它们的差 ai - ai+1 也是 p 的倍数。反之,如果它们的差 ai - ai+1 是 p 的倍数,那么它们的和 ai + ai+1 也是 p 的倍数。

根据上述推理,我们可以构造一个排列,在这个排列中,任意相邻的两项之差都是 p 的倍数。具体构造方法如下:

  1. 首先,我们将所有的 p 的倍数填入排列中,即排列为 p, 2p, 3p, ..., np。这样,任意相邻的两项之差都是 p 的倍数。

  2. 接下来,我们将剩余的数字按照从小到大的顺序填入排列中,直到排列的长度达到 n。这样,排列中的每一项都与相邻的两项之差都是 p 的倍数。

例如,对于输入样例 9 1,我们可以构造的排列为 1 2 3 4 5 6 7 8 9。这个排列中,任意相邻的两项之差都是 1 的倍数。

再例如,对于输入样例 5 2,我们可以构造的排列为 2 4 1 3 5。这个排列中,任意相邻的两项之差都是 2 的倍数。

最后,对于输入样例 1 12345,由于只有一个数字,那么构造的排列就是该数字本身,即 1

题目描述给定正整数 p 和 n。对于一个排列我们称其中相邻两项产生「共振」当且仅当这两个数的和为 p 的倍数。请你构造一个 1∼n 的排列最大化其中产生「共振」的次数。如果有多种方案输出任意一种即可。输入格式本题有多组测试数据。输入的第一行包含一个正整数 T代表数据的组数。对于每组测试数据输入包含一行为由空格隔开的两个正整数 n 和 p。输出格式对于每组测试数据输出一行包含由空格隔开的 n 个正整

原文地址: https://www.cveoy.top/t/topic/iIOP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录