zoukankan      html  css  js  c++  java
  • Codeforces Round #566 (Div. 2)

    Codeforces Round #566 (Div. 2)

    D

    题意:给一棵无根树,求找到一个点为根使得同深度的点的度数相同。 (n le 10^5)

    key:讨论

    考虑叶子:答案可能在直径中点(即树的中心)。除此之外答案只能是一个一度点。

    check完树的中心之后,若不是,考虑应该以哪个叶子为根。

    1. 首先要以树中心为根统计一下每个叶子的深度,叶子至多被划分为两个深度,否则则无解。

    2. 此时如果存在一个叶子到树中心的路径上均为二度点,那么它有可能是答案,需要check(如果有多个这样的叶子那么随意挑一个就行)。如果失败,那么一定无解(因为树中心是非法的)。

    3. 此时如果叶子按深度被分为两类,那么如果存在一类中只有一个叶子,那么拿它check。

    只有以上三种情况。为了防止树中心在边上,可以在每个边上加一个虚点。

    F

    题意:求在区间 ([a,b]) 中找一个最小的 x 使得 ( ext{abs}( ext{sin}(frac{p}{q} pi x))) 最大。 (0 le a le b le 10^{9}, 1 le p,q le 10^9)

    key:姿势

    实际上是求一个最小的 x 使得 (f(x)=2px mod 2q) 最靠近 q。

    性质:(f(x)+f(y)equiv f(x+y) mod 2q) 。所以对于区间内每个数 x ,都可以把它拆分为 (x=a+i*t+j) 。其中 (t=sqrt{b-a+1}, j=(x-a) mod t, i in [0,t])

    所以只需要把所有 (f(a+j)) 记下来排个序,之后枚举 i 二分查找即可。剩余的区间( (i=t) 时 j 可能取不到所有([0,t)) )需要暴力。

    有两个坑点:1. 有序表中同样 f 的取小的。 2. 因为模运算的序列是环形的,所以如果二分查找的结果是首/尾,需要特判。

  • 相关阅读:
    对我影响最大的老师
    介绍自己
    JavaScript 时间特效 显示当前时间
    js 获取函数的所有参数名
    node.js 在函数内获取当前函数
    js 实现二叉排序树
    命令行下mysql的部分操作
    浅析js的函数的按值传递参数
    返回上一页时,保存恢复浏览记录(模拟返回不刷新)
    让mongodb执行js文件
  • 原文地址:https://www.cnblogs.com/dqsssss/p/11192601.html
Copyright © 2011-2022 走看看