Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:2 s 空间限制:256 MB

#3558. 「CTSC2011」排列

Statistics

题目描述

沫沫很喜欢找规律填数字,譬如 $1,4,7,(\ \ ), \cdots$,相邻的数相差为 $3$,括号中的数应为 $10$;又如 $3,6,12, (\ \ ), \cdots $,每个数是前一个数的两倍,括号中的数应为 $24$。

由于常年玩这种游戏,沫沫厌倦了等差数列与等比数列。当看到数列 $1, 2, \cdots ,n$ 时,她想尽量小的改变其顺序使得不存在公差为 $A$ 或者公比为 $B$ 的子列。

具体地,给定整数 $n, A, B$,求一个 $1$ 到 $n$ 的排列 $P = (P_1, P_2, \cdots , P_n)$,满足 $\forall i, j \in {1, 2, \cdots , n}$,若 $i \lt j$ 且 $P_i \lt P_j$,则 $P_j\not = Pi + A$ 且 $P_j \not = Pi \times B$。排列 $P$ 保留原有顺序的程度 $S$ 定义为: $$S=\sum{1\le i\lt j\le n,P_i\lt P_j} (P_j-P_i)$$

请你在满足前述要求的前提下,使得 $S$ 的值尽量大。

输入格式

第一行包含三个正整数 $n, A, B$,意义如前所述。相邻的数之间用一个空格隔开。

输出格式

第一行包含 $n$ 个整数,为你求得的排列 $P$,相邻的数之间用空格隔开。

样例

input

4 3 2

output

4 2 1 3

该排列对应的 $S = 3$,是 $n = 4,A = 3, B = 2$ 时能取到的最大的 $S$。

数据范围与提示

评分方式

每个测试点单独评分。

对于每一个测试点,如果你的输出不合法,如文件格式错误、输出的解不符合要求等,该测试点得 $0$ 分。
否则设你输出的排列对应 $S$ 值为 $a$,我们提供的排列对应 $S$ 值为 $b$,你在该测试点的得分如下:

  • 如果 $a\ge b$,得 $10$ 分;
  • 否则得分为: $$\max { \lfloor 10\times (\exp (\frac{a}{b})-2)\rfloor,1}$$

数据规模

总共 $10$ 个测试点,数据范围满足:

测试点编号 $n$ $A$ $B$
$1$ $\le 30$ $\le n$ $\le n$
$2$ $\le 60$ $A\bmod B\not =0$ $\ge 4$
$3$ $\le 70$ $A\bmod B\not =0$ $\ge 5$
$4$ $\le 80$ $A\bmod B\not =0$ $\ge 6$
$5$ $\le 90$ $A\bmod B\not =0$ $\ge 7$
$6$ $\le 90$ $\le n$ $=1$
$7,8$ $\le 90$ $\le 5$ $\le n$
$9$ $=60$ $=21$ $=3$
$10$ $=90$ $=18$ $=2$

在所有输入数据中,$A$ 与 $B$ 均为不超过 $n$ 的正整数。