Codeforces Round #805 (Div. 3) 总结

比赛地址

比赛情况

排名:372 / 25552
AC:7 / 8
一直没留意,开始了才发现expert unrated

题目分析

A

语法题

B

从前往后扫,一旦出现3种以上字母,答案+1

C

用map记录每种数字第一次出现的地方和最后一次出现的地方,然后判断两个车站第一个第一次出现的地方是否早于第二个最后一次出现的地方

D

显然,去掉字母顺序必然是从za去掉的,于是按字母顺序倒序排序,只要还没到达要求就继续去

E

敌人并查集

只要两个牌子出现同一数,先判断是否在同一集合,在同一集合直接NO,否则就把它们和敌人并在一起

F

先把 \(a\) 中的数全部变成奇数,然后 \(b\) 中的数不断除2,判断在 \(a\) 中是否存在,不存在继续除2,除到0直接NO

G1

\(O(n\times q)\) 做法

以一个标记点为根开始搜索,除根以外其它节点只能有一个分叉,根节点允许有两个分叉

G2

\(O(n\log n)\) 做法

不断维护路径的左右端点,假设为 \(L,R\),当前这个点为 \(k\)\(dis(x,y)\) 表示 \(x\)\(y\) 之间的距离

  1. \(dis(L, k)+dis(k, R)=dis(L, R)\)\(k\) 在路径上
  2. \(dis(k, L)+dis(L, R)=dis(k, R)\)\(k\) 为路径左端点,更新左端点
  3. \(dis(L, R)+dis(R, k)=dis(L, k)\)\(k\) 为路径右端点,更新右端点
  4. 以上情况都不是,输出 NO

\(dis(x,y)\) 可以用lca来求

赛后总结

第一次expert打div.3,没见识,以为rated,开始后调了很久才发现unrated

感觉速度变慢,最后一题遗憾做不出(也正常,没见过这种题型)

A上来就看,看完后发现忘记加载cpeditor,就先跑去dev那边打,在3min时才过

B题刚打完,过不了样例,改了改才过,11min

C题一开始想着排序,后来发现直接用map就可以了,19min时交,wa了,后来发现要判断是否存在,20min时过

D题看完后一开始想着用优先队列,后来发现直接排序即可,27min时过

E题感觉就是个敌人并查集,打完后没过样例,发现打错了,改完后42min时交,wa了。然后发现可能有非法输入,44min时过了

F题上来就往二进制方向想,想了10分钟,发现先去掉 \(a\) 末尾0,然后 \(b\) 不断除2判是否存在,感觉和以前一条题很像,但哪道忘了,56min时过

G1想着先搞定G1,再想G2,不用上来就G2。G1还挺容易想,判断有没有分叉即可,就是调了很久,75min时过

剩下时间一直想G2,一开始没思路,后来想着转化成dfs序上问题,打完后发现过不了样例,还需要一个lca,然后打完lca又不知道怎么用(其实现在已经很接近了),然后开摆

G2后来看别人代码发现是用路径长度来判断,不断维护路径左右端点的

posted @ 2022-07-11 09:17  zhangtingxi  阅读(36)  评论(0编辑  收藏  举报