zoukankan      html  css  js  c++  java
  • AtCoder Regular Contest 105 题解

    A


    计算 (tot = frac{a+b+c+d}{2}) , 枚举子集判断是否相等即可。

    (Theta(1))


    B


    不难发现这个过程的结果类似辗转相减,并且结果一定是所有数 (gcd) 的倍数,也一定是所有数 (gcd) 的约数。

    所以结果自然就是所有数的 (gcd) 了。

    (Theta(n log a_i))


    C


    枚举 (Theta(N!)) 种骆驼的排列方式,然后直接贪心即可。

    (Theta(N!N^2log M)) , 如果精细实现可以强行卡掉这个 (log)


    D


    不难发现放完硬币之后就变成了一个 ( exttt{Nim}) 游戏,而这个 ( exttt{Nim}) 游戏的先后手不知道,所以考虑分类讨论。

    (N) 为偶数时,第一个人在 ( exttt{Nim}) 游戏中是先手,所以他的目标是让 ( exttt{Nim}) 游戏的 (SG) 值为非零数。

    首先如果所有的 (a_i) 都是成对出现的,也就是说每种数的出现次数都是偶数次,那么第二个人可以复制第一个人的所有操作,进而保证 ( exttt{Nim}) 游戏的 (SG) 值为 (0) , 那么第一个人就输了。

    否则第一个人一定能赢,具体策略是一直把当前还没有放过的最大值丢到一个堆里,这样的话就能保证 ( exttt{Nim}) 游戏中有一个堆的总和 (>) 所有硬币数目的一半 ,那么怎么异或都不可能到达 0 了。

    (N) 为奇数时,第一个人在 ( exttt{Nim}) 游戏中是后手,所以他的目标是让 ( exttt{Nim}) 游戏的 (SG) 值为零。

    这时候不管怎么样第一个人一定会输,第二个人只要一直取当前没放过的 (a_i) 中的最大值加到第一个人一开始放的堆里即可保证这个堆的总和 (>) 所有硬币数目的一半,那么第一个人就输了。

    复杂度(Theta(sum n)) .


    E

    F

  • 相关阅读:
    FORM触发器执行顺序
    Invoke和BeginInvoke理解
    理解AppDomain
    BackgroundWorker学习笔记
    NLog类库使用探索——编程配置
    NLog类库使用探索——详解配置
    NLog类库的使用探索——认识配置+实习小感悟
    深入探讨WPF的ListView控件
    深入理解IOC模式及Unity框架
    网络通信之 字节序转换原理与网络字节序、大端和小端模式
  • 原文地址:https://www.cnblogs.com/s-r-f/p/13800431.html
Copyright © 2011-2022 走看看