#band. 2026提高组模拟赛09-T1 程老师的手环

2026提高组模拟赛09-T1 程老师的手环

时间限制:1000ms 内存限制:512MB

题目描述

程老师的朋友开了一家手工艺品店,招牌产品是串珠手环,在老街上卖了十年,回头客不少。最近店里进了一把 nn 颗珠子,第 ii 颗珠子上刻着一个整数 aia_i(是它的"灵光值",老师傅用秘传的法子一颗颗测出来的)。老板想挑个吉日把这 nn 颗珠子全部串成一条手环——一字排开串好,两端再系上搭扣就能上架。

老板有个坚持了十年的怪讲究:手环上相邻两颗珠子的灵光值之和,不能被 3 整除。按他的说法,"逢三必乱"——两颗凑出个 3 的倍数,整条手环的"气"就散了。比如灵光值 1122 的珠子不能挨着(1+2=31 + 2 = 3),两颗灵光值 33 的珠子也不能挨着(3+3=63 + 3 = 6),但 1111 挨着没事(1+1=21 + 1 = 2),2233 挨着也没事(2+3=52 + 3 = 5)。常有顾客笑他迷信,他也不恼,只说十年间的退货从没出过在这条规矩上的。

珠子是混在盒子里随便抓出来的,顺序得重新排。老板还有第二个讲究:店里陈列的所有手环都按统一规范串制——在全部符合"逢三必乱"的排法里,要挑字典序最小的那种。什么叫字典序最小?把两种排法的灵光值从第一颗开始依次读出来比较,找到第一处不一样的位置,那个位置上值更小的排法就更小。规范这么定,是为了不同批次的货摆在一起整整齐齐,老顾客闭着眼都知道怎么挑。

程老师被叫来帮忙:把 nn 颗珠子排成符合要求的手环,输出字典序最小的排法。如果怎么排都满足不了老板的讲究,输出 -1,让他趁早死心换一批珠子——这种事以前也发生过,一整盒珠子里全是一个路数的,怎么倒腾都违规,最后只能整批退回。

输入格式

第一行一个整数 nn,表示珠子数量。

第二行 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n,表示每颗珠子的灵光值。

输出格式

如果存在合法排法,输出一行 nn 个整数,用空格隔开,表示字典序最小的排法。

如果不存在,输出一行 -1

数据范围

测试点编号 nn \le 特殊性质
1 ~ 2 1010
3 ~ 6 500500
7 ~ 8 20002000
9 ~ 10 10510^5 A
11 ~ 12 B
13 ~ 16
17 ~ 20 2×1052 \times 10^5
  • 特殊性质 A:所有灵光值都不是 3 的倍数。
  • 特殊性质 B:所有灵光值模 3 的余数都相同。
  • 对于全部数据,1n2×1051 \le n \le 2 \times 10^50ai1090 \le a_i \le 10^9

样例

样例 1

输入

5
3 1 2 6 4

输出

1 3 2 6 4

解释:逐位验证:1+3=41+3=43+2=53+2=52+6=82+6=86+4=106+4=10,都不是 3 的倍数,合法。字典序上还有没有更小的?第一颗最小只能放 11;第二颗候选里 22 不行(1+2=31+2=3 违规),只能放 33;第三颗放 223+2=53+2=5 可以);第四颗候选里 44 不行(2+4=62+4=6 违规),放 66;最后放 44。每一位都取了能取的最小值,这就是字典序最小的排法。

样例 2

输入

3
3 3 3

输出

-1

解释:三颗珠子的灵光值都是 3 的倍数,任取两颗挨着,和都是 3 的倍数。三颗珠子总要有一颗和另一颗相邻,怎么排都违规,输出 -1

样例 3

输入

3
2 2 3

输出

2 2 3

解释:按 2,2,32, 2, 3 排:2+2=42+2=42+3=52+3=5,都合法。第一颗放最小的 22,第二颗放 222+2=42+2=4 可以),第三颗放 33,这就是字典序最小的排法。

难度 普及+/提高-
通过率 50%
尝试 8
已通过 4
ID
667
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者

相关

在下列比赛中:

暑假CSP-S模拟赛 第2场