2020.7.11比赛总结

感受:这场比赛其实挺简单的,但有个题我看到是困难版本以为是个图论题,结果想麻烦了,耽误了一小时最后结束后发现其实直接dfs记忆化搜索就行,唉,还是不灵活,周日好好总结总结。

A题

题目大意:给你一个数n找出大于等于n的最小的数m使其可以被分解成三的幂次方和的形式,不能有重复三的幂次方出现。
思路:简单版本直接一个个往上判断就行,写一个judge函数判断能不能分成三的幂次方和形式,然后能的话直接输出结果,不能的话n++。最大1e4,所以提前存一下三的二十次方之前的所有值。

B题

题目大意:有n个学生,把他们分成若干队,要求每队中的学生任意两人之间的能力值之差的绝对值不能为1.问最少能分成几队。
思路:数据量小的可怜,挨个判断就行了。

C题

题目大意:有一个数轴,给你n条线段,若一个点j被覆盖严格大于k次则是一个坏点,问去掉最少几条线段让这条数轴上没有坏点。
思路:这是简单版本,数据量最大只有200.按每条线段的右端点排序,然后线段树维护一下区间最值,然后遍历n条线段,若加入当前线段会有坏点出现则删除此线段,因为是按右端点排序,所以删掉的一定是最长的那个。若不会出现坏点,则利用线段树对区间加1。

D题

题目大意:给你n个人,每个人只有一个特定的传递对象,问每个人最少传递几次能再回来。
思路:这是简单版本数据量小挨个传递就行了。直到回到自己这里就记录结果,

E题

题目大意:A题困难版本。
思路:最大是1e18暴力求会超时。但是做的时候能联想到二进制,那我们可以把这个数转换成三进制。比赛中另外一个题想麻烦,导致最后没写这个题。三进制中只有012,当数字中出现2时若要表示成三的幂次方和,则一定会出现重复的幂次方,所以遇到2一定要进以为,类似于位运算的左移操作。但为了保持最小,所以要让第一个2后面的所有数字变成0,然后从2开始往前的第一个0加1.
若当前数字是1要进位的话要加 3 i 3^{i} 3i其中i是从右数第i位.然后细节很好把控,写就就行了。

F题

题目大意:C题苦难版本。
思路:因为写的c就已经是线段树写的了,时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)所以只用把线段树大小改大点就好了。

G题

题目大意:D题困难版本
思路:记忆化搜索,dfs(i,l)表示当前节点为i环的长度是l,设置一个vis数组,若跑到以前跑到过的点直接记录环的长度,否则接着往下跑。

你可能感兴趣的:(总结)