奇偶校验排列
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
问题描述
某个校验系统需要把 这 个编号各使用一次,排成一个长度为 的序列 。这样的序列称为一个排列。
系统会根据排列中相邻两个编号的差值奇偶性生成一个长度为 的校验串。对于每个 ,第 位校验字符 按如下规则确定:
- 如果 为偶数,则 为 ;
- 如果 为奇数,则 为 。
现在给定一个长度为 的目标校验串 。你需要构造一个排列,使它生成的校验串 恰好等于 。
如果存在多个满足要求的排列,请输出字典序最小的一个。对于两个不同排列 与 ,若存在位置 ,使得前 个数都相同且 ,则称排列 的字典序小于排列 。
如果不存在满足要求的排列,请输出 。
输入格式
第一行包含一个整数 ,表示编号数量。
第二行包含一个长度为 的字符串 ,表示目标校验串,字符串仅由字符 和 组成。
输出格式
如果不存在满足要求的排列,输出一行一个整数 。
否则输出一行 个整数,表示字典序最小的合法排列。相邻两个整数之间用一个空格分隔。
测试数据
样例输入 1
5
1010
样例输出 1
1 2 4 3 5
样例说明 1
该排列对应的相邻差值依次为:
- ,为奇数,对应 ;
- ,为偶数,对应 ;
- ,为奇数,对应 ;
- ,为偶数,对应 。
因此生成的校验串为 。在所有合法排列中, 的字典序最小。
【样例输入 2】
6
00000
【样例输出 2】
-1
【样例说明 2】
目标校验串的每一位都是 ,因此任意相邻两个编号的差值都必须为偶数,也就是它们奇偶性相同。这样所有位置上的编号都必须具有相同奇偶性,但 到 中既有奇数也有偶数,所以无解。
【样例输入 3】
8
0101101
【样例输出 3】
1 3 2 4 5 6 8 7
【样例说明 3】
输出排列生成的校验串依次为 ,与目标校验串 相同。
数据分布
【评测用例规模与约定】
对于 的评测用例,。
对于 的评测用例,。
对于所有评测用例,,且 的长度为 。
2026年蓝桥杯全国软件与信息技术专业人才大赛软件赛C/C++ B 组(民间样例)
- 状态
- 已结束
- 规则
- IOI
- 题目
- 10
- 开始于
- 2026-6-6 22:00
- 结束于
- 2026-6-8 22:00
- 持续时间
- 48 小时
- 主持人
- 参赛人数
- 6