zoukankan      html  css  js  c++  java
  • 清华集训 part1


    跳跳棋

    假设有 a < b, 那么可以变成 b < b + (b - a) 或 a - (b - a) < a, 也就是 b < 2b - a 或 2a - b < a。

    也就是说以 x 为中轴跳动 y 就会让 y 变成 2x - y。

    似乎很难, 但是题目说了不能跳过两个棋子, 这就大大限制了能玩出的花样。

    那么支持的操作只有:

    1. 中间的棋子跳成两边的
    2. 离中间棋子较近的跳成中间的

    发现缩小两边棋子距离的跳法只有一种, 这样, 整个状态空间可以看成一颗树, 这样, 可以通过判断初始状态和目标状态在树上的距离(不连通就是 infty)来寻找答案。

    首先跳到根很容易跳,这样就可以判断无解。

    然后发现可以在跳的过程中记录步数, 进一步发现可以快速跳指定的步数。

    然后就可以做了, 跳到相同深度然后二分 lca 的深度即可。

    提交记录

    Rmq Problem / mex

    查询的时候对于 [1,r] 的值域线段树, 叶节点记录的是每个数最后出现的位置, 挺妙的。

    提交记录

    模积和

    推式子 + 数论分块。

    代码年代久远,丑(

    提交记录

    串珠子

    比较经典的方法, 即 G = exp(F) → F = ln(G) 连通的方案数 = 所有方案数 - 不连通的方案数。

    不连通的方案数可以通过枚举点 1 所在连通块的大小来实现, 这就又分成了子问题。

    代码年代久远(

    提交记录

    小 Y 和二叉树

    ——字典序有天然的贪心性质

    显然序列中的第一个数是度数 (le 2) 的编号最小的那个点, 设其为 pos。

    分类讨论:

    1. pos 的度数是 1, 那么设 pos 唯一连着的点为 els, 那么 els 当 pos 的父亲的话, 第二个点就是 els(case 1), 反之 els 当 pos 的右儿子(case 2), 则第二个点是 els 的左儿子或 els。比对 case 1 和 case 2 的价值, 哪个小取哪个。case 1 的话, 相当于去掉 pos 之后再回到分类讨论;case 2 的话, 就是另一个问题,“根节点确定了,求字典序最小的中序遍历”, 这个很好搞。如果 case 1 和 case 2 价值相等的话, 即不论 case 1 还是 case 2, els 都是第一个点,这样 els 的度数是 2, 那么可以发现不论直接按 case 1 还是直接按 case 2 处理都是等效的。
    2. pos 的度数是 2, 那么设 pos 连着的两个点为 p,q,那么 els 必有右儿子, 比对下 p,q 当右儿子哪个价值大就行了, 这就又分割成两个子问题。不可能发生相等的情况。

    将最初的哪个 pos 作为根, 就可以很轻松地实现上述算法。

    提交记录

    奇数国

    又臭又长的题面真是文明发展的毒瘤 =_=|||

    首先这个不相冲等价于 gcd = 1, 那么题面可以被概括为:

    1. 单点修改
    2. 询问某个区间的数乘起来的 φ 值。

    询问的结果对 19961993 取模。

    这个看上去就是 log2 线段树维护质因数分解啊。

    然后这个模数是质数, 于是可以光维护区间乘积和质因子有没有出现过, 就是单 log 了。

    (把 φ 的公式记错了调了几分钟草

    提交记录

  • 相关阅读:
    AOP在Spring Boot中如何使用
    拦截器在Spring Boot中如何使用
    跨域在Spring Boot中如何处理
    @ControllerAdvice
    文件上传之Spring Boot整合web层
    Git和GitHub
    Spring Boot 整合web层之JSON,gson,fastjson的使用
    Spring boot整合视图层
    Spring Boot中的parent是什么?
    网页自动化,验证码识别函数,深度学习训练
  • 原文地址:https://www.cnblogs.com/tztqwq/p/14514691.html
Copyright © 2011-2022 走看看