zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 184

    AC代码

    A - Determinant

    输入输出。

    B - Quizzes

    简单模拟。

    C - Super Ryuma

    分类讨论,万万没想到这题是花时间最多的。

    • 一步可达:满足题目中的条件。
    • 两步可达:
      • 走一次对角线后欧几里得距离小于三,此时可以直接枚举和((r_2, c_2))欧几里得距离小于三的点,然后看是否能够通过一次走对角线到达((r_1, c_1))
      • 走两次对角线:就是过((r_1, c_1))的对角线和过((r_2, c_2))的对角线有整数交点。
    • 不然必定三步可达,具体就是先走到对角线交点附近,在走到过((r_2, c_2))的对角线上,最后到达((r_2, c_2))

    D - increment of coins

    概率DP。

    由于参数都很小,所以整了个(O(n^3))的DP。

    (dp_{i, j, k})表示三种硬币数量分别为(i, j, k)的概率,初始时只有(dp_{a, b, c} = 1),其余皆为零。

    一次操作时,选金币的概率为(frac{i}{i + j + k}),选了之后转移到(dp_{i + 1, j ,k})。所以(dp_{i + 1, j, k} += dp_{i, j, k} imes frac{i}{i + j + k})

    若金币数量达到100则结束,根据期望的定义(E = sum_{i = b} sum_{j = c} (100 + i + j - a - b - c) imes dp_{100, i, j})

    银币和铜币同理。

    E - Third Avenue

    经典优先队列+BFS。

    就是多写通过传送转移的部分。具体就是如果是第一次走到小写字母(ch)的格子,就枚举一遍所有((i, j)),看是否能够传送到((i, j))。如果不是第一次走到,那么通过传送必不可能达到更优的答案,所以这个时候只考虑上下左右的转移就可以了。

    时间复杂度(O(26nm))

    F - Programming Contest

    暴力+trick优化。

    将这(n)个数等分成两部分。对于其中的一部分,暴力枚举(2^{n_1})种情况,然后就得到了前(n_1)个数可能得到的所有结果,用数组(t_1)保存。

    特别的,如果用的递归枚举,还可以加剪枝。

    第二部分同理。

    (t_1)(t_2)升序排序,然后就是(t_1)中拿一个数,(t_2)拿一个数,问组成的最大的不超过(T)的数是多少。这个就是比较经典的题了,二分或者双指针乱写完事。

    时间复杂度(O(2^{20} log 2^{20})),主要是排序的复杂度。

  • 相关阅读:
    负载(Load)分析及问题排查
    MySQL 数据库规范--调优篇(终结篇)
    AbstractQueuedSynchronizer
    为什么String被设计为不可变?是否真的不可变?
    数据库 分库 分表 分区
    Oracle 数据库知识汇总篇
    小知识:如何判断数据文件的高水位线
    RHEL7安装11204 RAC的注意事项
    案例:DG主库未设置force logging导致备库坏块
    Oracle 11g RAC之HAIP相关问题总结
  • 原文地址:https://www.cnblogs.com/zengzk/p/14021834.html
Copyright © 2011-2022 走看看