zoukankan      html  css  js  c++  java
  • Codeforces Global Round 12 题解(A-F,H1)

    A.排序
    B.对某个点操作(1)次后与其他剩下的点距离都大于(k),不能再操作.因此只能操作(1)次,枚举操作的点.
    C.对格子根据((i+j)mod 3)分成(3)类,三连必然是每类各(1)个,如果其中有(1)类全是'O',有(1)类全是'X',则三连数量都为(0).
    D.考虑如果(1)不唯一或不在边上,那么对所有(1<k<n),会出现(2)段最小值为(1).
    同理,去掉(1)后,如果(2)不唯一或不在边上,那么对所有(1<k<n-1),会出现(2)段最小值为(2).
    依次类推,因此如果存在(k>1)的解,那么前(1)~(n-k)个数必然是从两端到中间,并且中间最小值为(n-k+1).
    (k=1)判断序列是否为排列即可.
    E.如果(b=0)双向添加边权为(1)的无向边,否则正向添加(+1)边,反向添加(-1)边.
    枚举每个点(i)为最小值,可以发现其他点的权值必然是从(i)出发的最短路.求出最短路再判断是否符合原来的限制.
    由于有负权边,求最短路需要用Bellman-Ford算法.
    F.本质是将原序列分成若干段重新连接,使得相邻位置不相等,代价是段数(-1).
    考虑已经分成(k)段,能够重新连接当且仅当端点上的数出现次数最大值不超过(k+1).
    记出现最多的数为(m),出现次数为(c_m),需要满足(c_mle k+1).
    原序列中相邻相等的位置必然要切开,考虑剩下还可以切开的位置是相邻不相等的位置.
    如果相邻两个中有(m),那么(c_m)(k)都会(+1)这种操作没有意义.如果这两个都不为(m),那么操作可以使得(k+1).
    考虑是否能通过操作使得(c_mle k+1),如果可以,答案是(k-1).
    H1.首先相邻相同的两个颜色可以消掉,直到黑白相间,(f)是剩下点数(/4).
    考虑把奇数位置上的颜色翻转,那么就变成相邻不同颜色可以消掉,直到剩下颜色全相等.那么(f)就是两种颜色数量差的绝对值.
    因此枚举问号对翻转后贡献颜色的数量,就可以算出H1.

  • 相关阅读:
    solaris 10 root忘记密码的解决方法
    c程序设计--指针与数组
    photoshop之色阶的使用
    Handling Errors Exceptionally Well in C++ 在C++中良好地捕获意外的错误
    自动换行 wordbreak:breakall和wordwrap:breakword
    透明度
    position:fixed在IE6下的实现
    JavaScript教程:常用DOM操作方法,JavaScriptDOM基本操作
    30 个免费的 UI 工具箱
    去掉虚线框兼容所有浏览器
  • 原文地址:https://www.cnblogs.com/Heltion/p/14095404.html
Copyright © 2011-2022 走看看