zoukankan      html  css  js  c++  java
  • Codeforces 1389 题解(A-E)

    AC代码

    A. LCM Problem

    (a < b),则(LCM(a,b))(a)的整数倍且(LCM(a,b) e a),所以(LCM(a,b) ge 2a),当且仅当(b=2a)时取等号。

    根据这个性质,就可以让(a=l, b = 2l),如果符合条件就输出,否则无解。

    B. Array Walk

    这题暴力+贪心做。

    根据贪心,答案必定取在在同一个位置左右横跳的情况下。

    由于(z)的取值很小,所以直接枚举走到第(i)个位置之后左右横跳(c)次的收益,然后再加上走完剩余步数的收益,取最大值为答案。

    注意,剩余步数为(1)(c<z)时要考虑向左走的情况。

    C. Good String

    易得,字符串符合条件(Leftrightarrow)字符串有长度为2的循环节。

    然后就暴力枚举循环节,每次遍历一遍字符串计算代价,代价的最小值就是答案。

    注意,仅当循环节的两个字符都一样时才可以不完全循环。

    D. Segment Intersections

    首先,如果([l1,r1])([l2,r2])相交,那么就可以不耗费步数增加(I)

    然后,若两个线段不相交,则耗费一定的步数之后,可以到达两个线段相交的状态。

    在两个线段相交但不完全相等的情况下,耗费1步可以使(I)增加1,直到两个线段完全相等。

    最后,在两个线段完全相等之后,就只能耗费2步使(I)增加1。

    然后,就是快乐的模拟过程了,优先使用耗费步数低的操作,直到(I ge k)

    UPD: D题代码被叉了,有个地方可能会出现除零错误,现在已经更新成能过的版本了。

    E. Calendar Ambiguity

    (y)(x)号为第(yd+x)天,对应星期((yd+x) ext{ } mod ext{ } w)

    题目转换成寻找满足(yd+x = xd+y ext{ } (mod ext{ } w))((x, y))

    移项并化简后得到((x - y)(d - 1) = 0 ext{ } (mod ext{ } w))

    由于((d-1))是常数并且可能包含(w)的某些因子,所以可以将用(w^{prime}= frac{w}{gcd(d-1,w)})来替代(w),从而消除上述公共因子的影响。

    现在的式子为((x - y)(d - 1) = 0 ext{ } (mod ext{ } w^{prime})),其中((d-1)和w^{prime})没有公共因子。由此,只需要找到满足((x - y) = 0 ext{ } (mod ext { } w^{prime}))((x, y)),即((x-y))应为(w^{prime})的正整数倍。

    根据题意,(x < y)(x,y)都是符合要求的月份和日期,所以((x-y) in [1, min(m,d)])。所以,可以枚举((x-y))的值,计算每个对应值对答案的贡献并累加,从而得到最终的答案。

    又因为((x-y))应为(w^{prime})的正整数倍,所以枚举(i imes w^{prime})即可。

    易得,对于固定的(k=x-y)(k)对答案的贡献为(min(m,d)-k)。所以,最终答案为

    [ans = sum^{frac{min(m, d)}{w^{prime}}}_{i = 1} min(m,d) - i imes w^{prime} ]

    很明显,这个式子等差,可以用高斯求和公式在(O(1))的时间内计算。

    计算过程可能会炸精度,偷懒用了py写。

  • 相关阅读:
    Lucene.NET中Field.Index 和 Field.Store的几种属性的用法
    WP7学习笔记(三)
    sql注入
    JSP数据库开发实例
    oracle命令大全(转)
    .net个人涉及
    JavaScript的错误处理之onerror事件的使用方法
    脚本问题。调试
    做到了,你就成熟
    ea8.0
  • 原文地址:https://www.cnblogs.com/zengzk/p/13401553.html
Copyright © 2011-2022 走看看