2022-2023 XCPC暑训加训第一场

题目数:10,过题数:2

A

题目链接:https://codeforces.com/group/UitskjLDCx/contest/392065/problem/A

A题是一个思维题,因为给的最大数已经达到long long的级别,所以我们肯定不能去模拟向上加,一定会爆。所以要注意一下性质,A+=A的实质其实就是让B除以2。
同理,B+=B的性质就是让A除以2,当然一定要保证另一个数是偶数的情况,如果是偶数,就不断除,如果不是,我们就让小的加上大的,直到两个数相等为止,类似于辗转相减法。

起初以为这题难度应该不是签到题,结果却是最简单的。。。。。

dirt是因为输出不完整,没有先输出总步数。。。

F

题目链接:https://codeforces.com/group/UitskjLDCx/contest/392065/problem/F

题意

这题的题意是给一颗带权树,多次询问路径上出现次数超过一半的数。

分析

  • DFS序建主席树,维护的就是根到某个节点这段路径的值域情况。
  • 因为题目所求的不是一般的众数,而是出现次数大于一半的,所以在主席树上可以直接二分,看两个子树的值域哪个大于一半,就走哪个子树,如果都为一半,返回-1。
  • 树上主席树的查询不同于序列上的主席树,不是子树做差,而是子树相加减去两倍LCA对应的树,然后这样减去之后会把LCA对应的点也给减去,所以要根据LCA点权判断再加上。

F题搓了两小时吧,对板子不是很熟悉,调了很久,dirt是因为建树的时候没有++cnt,而是cnt++。

当时E题想到了优先队列去写,可以反悔的贪心,但是无奈写代码能力太差,搓不出来。

posted @ 2022-08-02 16:19  HiDen_01  阅读(41)  评论(0编辑  收藏  举报