zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 36

    Educational Codeforces Round 36

    A. Garden

    题目描述:给定(n)个数,找出能整除(m)的最大的数(假设是(num)),输出(frac{m}{num})

    solution
    枚举。

    时间复杂度:(O(n))

    B. Browser

    题目描述:有(n)个标签页,当前在第(i)页,有下面六个操作:

    1. 向左移动一个页面,即(i-1)
    2. 向右移动一个页面, 即(i+1)
    3. 关闭左边一个页面,即第(i-1)个页面
    4. 关闭右边一个页面,即第(i+1)个页面
    5. 关闭左边所有页面,假设左边最近一个已关闭的页面为(L),则关闭(L+1)(i-1)的页面。
    6. 关闭右边所有页面,假设右边最近一个已关闭的页面为(R),则关闭(i+1)(R-1)的页面。
      标签页删除后保持原来的编号。问最少多少个操作使得最后只剩下([x, y])的标签页。

    solution
    贪心。最好肯定是移到(x)(y)然后把(x)左边和(y)右边删除,但要仔细判断是否要删,删左边还是右边比较快。

    时间复杂度:(O(1))

    C. Permute Digits

    题目描述:给出两个数字(A, B),将(A)的数字重新排列,得到一个不超过(B)的最大的数,输出那个数。

    solution
    搜索。从高位开始与(B)匹配,如果存在与该位相同的数字,则取该数字,否则取比该数小的最大的数,若没数,则回溯继续搜索。若在某一位取了小于(B)对应位的数,那剩下的数字从大到小输出即可。

    时间复杂度:(O(18))

    D. Almost Acyclic Graph

    题目描述:给出一个有向图,问是否能最多删去一条边,使得剩下的图是有向无环图。

    solution
    找出任意一个环,尝试把环中的边一一删去,看剩下的是否是有向无环图,若是则输出YES。如果都不行,则说明这个环始终存在(若不删这个环的边),输出NO

    时间复杂度:(O(n^2))

    E. Physical Education Lessons

    题目描述:有(n)天,开始时每天都是工作日,接下来有(q)个修改,每个修改会把([x, y])变成工作日或非工作日,求出每次修改后的工作日天数。

    solution
    先离散化,然后用线段树维护。

    时间复杂度:(O(qlogq))

    F. Imbalance Value of a Tree

    题目描述:给出一棵有点权的树,求出所有路径的最大值减最小值的差的和。

    solution
    所有路径的最大值减最小值的差的和等价于所有路径的最大值的和减所有路径的最小值的和。

    考虑所有路径最大值的和。将点按点权从小到大排序,假设当前到了第(i)个点,前面的点用并查集维护连通性并记录每个联通块的点数。假设(j)(i)相连且(j)排在(i)的前面,因(i)是当前的最大值,且(j)连通块的点到(i)连通块的点必定经过(i),所以(j)连通块的点到(i)连通块的点的路径的最大值为(i),更新答案,然后将(i)连通块与(j)连通块合并为(i)连通块,对所有满足条件的(j)进行操作。最后就能算出所有路径最大值的和。

    同理,将点按点权从大到小排序,用同样的方法进行操作,就能求出所有路径最小值的和。求出所有路径最大值的和与所有路径最小值的和的差即是答案。

    时间复杂度:(O(nlogn))

    G. Coprime Arrays

    题目描述:将(n)个数(a_i)称为既约系当且仅当(gcd(a_1, a_2, ..., a_n)=1)。给出两个数字(n, k)。对于(i(1 leq i leq k)),计算出满足(1 leq a_j leq i (1 leq j leq n))的既约系(a_i)的个数,答案模(10^9+7)。假设每个(i)的答案为(b_i),输出(sum_{i=1}^{k}(b_i XOR i) mod (10^9+7))

    solution
    对于每个(i)(b_i)可用容斥原理来算。设(f(x)=x^n), 则(b_i=sum_{S} (-1)^{|S|}f(left lfloor frac{i}{S} ight floor)),其中(S)为小于等于(i)的质数的子集。如果把(S)换为(j(1 leq j leq i)),考虑每个(j)(b_i)的贡献,发现系数是莫比乌斯函数。即

    [b_i=sum_{j=1}^{i} mu(j)f(left lfloor frac{i}{j} ight floor) ]

    对于每个(j),只有(j|i)时,(left lfloor frac{i}{j} ight floor)会改变,所以可以设一个数组(g[i]),枚举(j)(g[kj]+=mu(j) (f(k)-f(k-1))),然后(g)的前缀和便是(b_i)

    时间复杂度:(O(nlogn))

  • 相关阅读:
    Netty源码解析与实战
    什么是序列化id?
    关于idea下tomcat输出日志的问题
    利用jstack 找到异常代码
    mysql 异常 Lock wait timeout exceeded; try restarting transaction;expc=java.sql.SQLExcept
    Spark-Hadoop、Hive、Spark 之间是什么关系?(转)
    转(数据分析的意义)
    按位取反~100=-101
    知识总汇
    前端(以Vue为例)webpack打包后dist文件包如何部署到django后台中
  • 原文地址:https://www.cnblogs.com/GerynOhenz/p/8319285.html
Copyright © 2011-2022 走看看