• ARC108 题解&总结


    掉分了……


    A

    解方程

    直接(O(sqrt P))枚举即可。


    B

    用个栈模拟即可。


    C

    我竟然卡了一会儿。

    造棵生成树,直接染色(经过某条边时,如果父亲的颜色不是这条边的颜色,儿子随便染;否则儿子染这条边的颜色)。


    D

    先写出个DP,发现会算重,然后一直想办法容斥……

    后来开始分类讨论快讨论完的时候觉得麻烦,不会是正解,就丢掉了……

    实际上还真是分类讨论题。

    (c_{AB}=A)。反之类似。

    1. (c_{AA}=A)时,发现只能形成(AAdots AB)这样的字符串。
    2. (c_{AA}=B)时:可以构造出这样的字符串,满足(A)最前,(AB)最后,中间放(A)(B),其中(B)不相邻。
      1. (c_{BA}=A)时:无影响。无需讨论(c_{BB})因为不会出现(BB)
      2. (c_{BA}=B)时:去掉了(B)不相邻的限制。此时(c_{BB})取值无影响。

    分别计算即可。


    E

    题面长了点当时没看。实际上是套路题。

    ​ 关于期望问题的子问题:记一个问题(S)的当前操作数为(c(S)),每次等概率选择一个操作继续搞下去。假设当前问题(S)被分成两个互不相干的子问题(S_1,S_2)。这时候有(E(S)=E(S_1)+E(S_2))。证明:设(E(S_1,S_2))表示在问题(S_1,S_2)下,单独算(S_1)的期望,假设(nxt(S))(S)的后继状态集合。归纳,假设已经证明(E(nxt(S_1)igcup S_2)=E(nxt(S_1))+E(S_2))(E(S_1,S_2)=frac{1}{c(S_1)+c(S_2)}sum_{S'_2in nxt(S_2)}E(S_1,S'_2)+frac{1}{c(S_1)+c(S_2)}sum_{S'_1in nxt(S_1)}E(S'_1,S_2)=frac{1}{c(S_1)+c(S_2)}sum_{S'_2in nxt(S_2)}E(S_1,S'_2)+frac{c(S_1)}{c(S_1)+c(S_2)}E(S_1))。左边递归下去到(c(S_2)=0)为止再反推回来。可以推出(E(S_1,S_2)=E(S_1))

    ​ 用人话来解释:在操作(S_2)时,对(S_1)无影响;操作(S_1)时,(S_1)到达每个后继状态的概率是等价的。因此只看(S_1)中的操作,它的期望和(S_2)无关。

    知道这个套路之后,直接设(f_{i,j})表示选了(i)(j)((i,j))的期望贡献。写出方程之后拆开可以用树状数组优化。


    F

    最后半小时开始搞,想出了正解但是自己将它ban掉了,打了个假做法来不及测样例交了上去。

    找出直径,如果直径端点颜色相同答案为直径;否则,求出每个点到两个端点的距离(a_i,b_i),问题转化成,对于端点外的点,每个点选(a_i)(b_i),答案为最大值。排序随便搞即可。

    可以证明,将树砍掉一些枝条之后,得到的新树的直径端点中至少有一个是原直径的端点。

    证明很套路不赘述了。


    综上所述其实这次的ARC好像比以前都要简单?

    但为什么我却只切了3题呢?

    ……

    感觉自己比较容易高估题目难度,而且在最后那点时间中比较急躁,导致交错误程序上去。

    啊啊啊我什么时候atcoder才能上2000啊!!

  • 相关阅读:
    Delphi 实现C语言函数调用
    Delphi采用接口实现DLL调用
    select、poll、epoll之间的区别总结[整理]
    int 的重载
    qt 安装包生成2
    线程池的简单实现
    qt 安装包生成
    linux 下tftpf搭建
    2018C语言助教总结
    动态规划——最长子序列长度
  • 原文地址:https://www.cnblogs.com/jz-597/p/14031257.html
Copyright © 2020-2023  润新知