zoukankan      html  css  js  c++  java
  • Codeforces 1138

    1138 B

    题意

    给你两个01串 (a,b) ,现在要选择 (n/2)(i) 组成一个集合 (S) ,使得 (sum_{iin S}a[i]=sum_{j∉S}b[j])
    ((2le nle 1500))

    Examples

    inputCopy
    4
    0011
    0101
    output
    1 4
    input
    6
    000000
    111111
    output
    -1
    input
    4
    0011
    1100
    output
    4 3
    input
    8
    00100101
    01111100
    output
    1 2 3 6

    ((1,0)) 总个数为 (A)((0,1)) 总个数为 (B)((0,0)) 总个数为 (C)((1,1)) 总个数为 (D)(iin S)((a[i],b[i])=(1,0)) 个数为 (x)(iin S)((a[i],b[i])=(0,1)) 个数为 (y)(iin S)((a[i],b[i])=(0,0)) 个数为 (w)(iin S)((a[i],b[i])=(1,1)) 个数为 (z)
    有: (x+z=B-y+D-z)
    得: (x+y+2z=B+D)
    然后只要枚举 (x,y) ,就能求出 (z,w)

    1138 F

    题意

    给你一条链,一端连着一个环(全部是有向边),一开始所有人(总共10人,编号 (in [0,9]) )都在最左端的节点,你可以进行最多 (3*n) 次操作,每次可以将若干个人向前移动一步,要你通过交互模拟出所有人到达目的地(旗子处,链和环的交点处)的过程。
    每次交互,如果你要移动一步,输出next a1 a2 a3 ,a数组表示要移动的人。如果你能断定所有人已到达目的地,输出done
    每次询问后评测机会返回当前10个人被分成几块。

    Example

    input

    2 05 12346789
    
    3 246789 135 0
    
    3 246789 0 135
    
    3 246789 0 135
    
    2 135 0246789
    
    1 0123456789
    

    output

    next 0 5
    
    next 0 1 3
    
    next 2 3 0 1 4 5 6 7 8 9
    
    next 9 8 7 6 5 4 3 2 1 0
    
    next 0 1 3 5
    
    next 1 3 5
    
    done
    

    有一种算法叫floyd判环(与 (n^3) floyd最短路算法没什么联系)
    具体操作方式:任取两个人 (a,b) ,重复执行:

    • (a,b) 向前移动一步;
    • (b) 向前移动一步。

    直到 (a,b) 相遇。
    此时 (a,b) 一定在环上。
    然后重复执行:

    • 将所有人向前移动一步。

    直到所有人相遇。
    此时所有人一定在那个目的地节点上。
    具体证明列一个方程模拟一下。

  • 相关阅读:
    SQL中UNION的使用
    [转]身份证号准确性检测
    shell中if/seq/for/while/until
    shell中数字、字符串、文件比较测试
    shell简介及变量的定义查看撤销
    grep/字符/次数匹配/锚定符/小大括号/wc/tr/cut/sort/uniq
    linux全局和个人配置文件说明
    linux文件的3个时间和7种文件类型
    linux常用配置文件和命令总结
    目录方式扩展swap分区大小
  • 原文地址:https://www.cnblogs.com/BlogOfchc1234567890/p/10498265.html
Copyright © 2011-2022 走看看