zoukankan      html  css  js  c++  java
  • 「解题报告」Codeforces Educational Round 81

    A.Display The Number

    水题一道,直接(1)(7)随便输出就行

    B.Infinite Prefixes

    这个题细节有一点点多

    预处理出来(s)串中每一个前缀的(0)(1)的差值,记为(a[space ])

    (a[s.length()])的值

    (1^0) 如果为(0),就考虑正无穷的情况

    如果有一个(a_i)的值与(x)相同,就直接为正无穷,否则为(0)

    (2^0) 如果不为(0),就考虑同余

    当前位置的(a[space])值和(x)是否关于(a[s.length()])同余即可

    还要注意正负性

    C. Obtain The String

    其实就是一个简单的模拟,里面套了一个(upper_bound)(或者说二分)

    预处理(s)中每一个字母出现的位置(开(26)(vector)),每一次直接模拟(t)中的字母,记录最后出现的位置(las)

    1.如果当前(t)中的字母(s)中没有,就直接(puts("-1"))

    2.就直接二分(las)后该字母出现的第一个位置,更新(las)的值,如果没有了就(++ans),(las)为该字母第一个出现位置(结论由简单贪心直接成立)

    D.Same GCDs

    这是一道结论题,有两个做法,分别用了欧拉函数或一点点莫比乌斯反演

    (这里只放欧拉函数的做法)

    (d=gcd(m,a))

    [gcd(frac{a}{d},frac{m}{d})=gcd(frac{x+a}{d},frac{m}{d})=1 ]

    从互质的关系入手进行考虑

    所以答案就是(varphi(frac{m}{d}))

    这个东西是可以在时限内求解的

    E.Permutation Separation

    暴力一眼就可以看出来,枚举分界点,然后左右两边统计答案即可,但复杂度是我们无法接受的

    然后我们看我们可以优化哪一部分

    (1^0) 枚举:这部分没有办法优化

    (2^0) 统计答案

    这里我们看每一个位置上的数字在什么时候会有增加答案

    当这种有的位置可以改变答案的时候,我们就要考虑贡献法

    由题意,分割点位置不同时,每个位置对于该状态下答案是否贡献是不同的

    “是否贡献”还是连续的,直接上线段树维护就好

    F.Good Contest

    完全有理由质疑是不是弱化版的 ( m{APIO2016}) 划艇

  • 相关阅读:
    bzoj4821
    bzoj2434
    第二阶段团队项目冲刺站立会议(五)
    第二阶段团队项目冲刺站立会议(四)
    第二阶段团队项目冲刺站立会议(三)
    小水王
    第二阶段团队项目冲刺站立会议(二)
    梦断代码阅读笔记02
    第二阶段团队项目冲刺站立会议(一)
    梦断代码阅读笔记01
  • 原文地址:https://www.cnblogs.com/yspm/p/12255071.html
Copyright © 2011-2022 走看看