P3677 [CERC2016]关键的膝盖 Key Knocking

    • 5通过
    • 55提交
  • 题目提供者 Claris
  • 评测方式 云端评测
  • 标签 Special Judge
  • 难度 尚无评定
  • 时空限制 1000ms / 128MB

题解

  • 提示:收藏到任务计划后,可在首页查看。
  • 最新讨论 显示

    推荐的相关题目 显示

    题目描述

    Goran正在从他的膝盖手术中恢复,并正在试验用于存储的智能卡加密密钥。在这个问题中,一个密钥是指一个长度为3n的二进制序列,其中n是正整数。序列的每一位从左往右依次被编号为1到3n。一个密钥的权值是指相邻位不同的位置个数再加上1。比如:“000”的权值是1,“011010100”的权值是7。

    他发现他可以发送小型脉冲电流来修改智能卡的电路,从而修改密钥。确切地说,他可以不断进行下面的操作:选择任意两个相邻的位,然后同时取反它们。比如他可以通过一次操作把“000”修改为“110”。

    给定一个长度为3n的密钥,请操作不超过n次,将其修改为一个权值不少于2n的密钥。你可以认为合法解必然存在。

    输入输出格式

    输入格式:

    包含一行一个01序列,表示初始密钥,保证长度一定为3n,且1<=n<=100000。

    输出格式:

    第一行包含一个整数m,表示操作的次数,你需要保证0<=m<=n。

    第二行包含m个正整数a_1,a_2,...,a_m(1<=a_i<n),依次表示每次翻转第a_i和第(a_i)+1位。

    如果初始密钥的权值已经不小于2n,你可以仅输出一行一个整数0。

    输入输出样例

    输入样例#1: 复制
    111001000111
    
    输出样例#1: 复制
    2
    3 9
    
    提示
    标程仅供做题后或实在无思路时参考。
    请自觉、自律地使用该功能并请对自己的学习负责。
    如果发现恶意抄袭标程,将按照I类违反进行处理。