记录下各种考试。
Manthan, Codefest 19
总结:
熬夜打了一半就咕了,只写了题,当时想出了的正解然而懒得打了。
如果时间是大概可以写出前题的样子,但是完全码不动。
A. XORinacci
题意:^,求。
显然可以拆位,每一位分成四种情况讨论,显然有循环节,打个表即可。
B. Uniqueness
题意:给定一个数列,求删去最短的连续一段使得剩下的数字不重。
二分答案之后每次暴力扫,离散化了开个权值线段树维护一下就是的,不知道是干什么。
C. Magic Grid
题意:给定一个,求一个的方阵,权值为的排列,使得所有行列的异或和相等。
构造题,卡了一会,开始的思路是直接顺序填,这样行全是,但是这样只有为的整数次幂的时候才有用。然后可以发现,这样只要顺序填的小方阵即可。这样同一行相邻两列相差,异或和为,同一列同小方阵差,一列相邻行异或和也为。
D. Restore Permutation
题意:已知有一个长为的排列,现在给定一个数列,表示。
考虑当前最小值就是中最靠后的那个,每次填一个最小值就把它后面所有都减去一个即可。用线段树维护区间最小值,区间最小值最靠右的出现位置,以及区间加即可。
E. Let Them Slide
题意:有个数组,都放在长为的框中,数组长度为,数组可以在框里面滑动,求每一列通过滑动数组能拼出的最大和。
考虑第行对第列的贡献,就是,一眼滑动窗口,当的时候暴力滑动(边加边删),否则分成三段(只加、不加不删、只删),中间不加不删直接打差分标记即可。
总复杂度。
F. Bits And Pieces
题意:给定一个数列,求&,
考虑先把后面&算出来,设表示出现最靠后的两个位置,注意这里出现不一定就是这样,而是&就算在位出现了。初值就是真实出现的位置,然后每次枚举删去某一位的来更新值。比如在枚举第位的时候更新,在枚举第位的时候更新、更新。
然后枚举每一位,显然我们有的位置使得其为能放宽条件,设二进制都为的时候为,那么我们只用考虑中的那些可以选到即可。还是从高位到低位枚举,若且有值那么该位就可以为。对每个取个最大值即可。
code:
1 |
|
G. Polygons
题意:给定,求构造个边数为之间的正多边形,使其外切圆相同,问最少需要几个本质不同的点。
有点厉害的构造题,发现一个贪心:一个边形被选中当且仅当边数为其因子的多边形都被选完。我们考虑把所有多边形旋转至共同一点,如果某个因子代价为,不选它而直接选的代价会增加,即总代价没变但是选的多边形白少一个,显然是不优秀的。考虑所有因子选完后,选新增的大家就是,考虑这个边形把圆分成了几段等长弧:圆周长。如果不是一个最简分数,约分后为,那么在枚举的时候就会算了答案,只有最简分数会贡献新的代价,故每个新增代价。
这里有个很巧妙的实现,就是直接选出中前小的,因为所以当我们真的取了的时候,它的因子的一定都被取完了。
还有一点就是我们默认要取边形和边形(即和),当的时候一定会取到的倍数,所以这里算进去没有问题,但是当的时候取,没有把边形算进去,所以需要特判。
1 |
|
H. Red Blue Tree
题意:给定一棵红蓝树,叶子有颜色,设一个点蓝儿子有个,红儿子有个,若则该点为蓝,否则为红。
支持以下操作:
询问某个点的颜色。
修改某个叶子的颜色。
修改
咕咕咕。
8.28 树专题模拟赛
总结:
上了看,感觉自己写不出圆方树,觉得肝的边分治套虚树。
深吸一口气,感觉码量不少。
我好像没写过边分支诶,一直点分的来着。随手了一下,于是就有了这么个实现:找个重心,然后选重心的最大的儿子那条边。
之后发现随机数据都很卡常,感觉不大对劲,但是一直以为是两个的缘故,于是一直想着去归并建虚树。知道最后突然意识到这样选边可能是的,造了个菊花就把自己卡掉了。
于是就很慌,感觉得多叉转二叉,又忘了多叉转二叉怎么写(-_-||),然后突然小样例都过不了了。
最后赶紧一顿撤回到十万个版本之前。只测了小样例,望着代码感觉很虚。
码力还是不够强,本来写这种板子套板子套板子应该得写完的,但是总是因为变量名混用和一些细节调很久很久。
9.3 字符串专题赛
总结:
想到根号分治,然而最后结论是“小于根号暴力,大于根号放弃”,于是,还因为数组开小了爆了。
没取模挂了。
这种挂分简直是弱智行为。
9.5 计算几何专题赛
总结:
阅读理解题恶心人,半平面交一堆细节结果挂了,文件名写错了(弱智行为)。
Codeforces Round #582 (Div. 3)
总结:
弱智手速场,死于网进不去+手速不够,只写了道。
Codeforces Round #583 (Div.1+Div.2)
总结:
肝肝炸了,。还好手速够快了三道水题保住了。
ABC
弱智题不解释。
D. Treasure Island
题意:给定一张网格图,其中有些点是障碍,只能忘右/下走,问至少再放几个障碍使得不联通。
感觉很像[NOI2016网格],答案肯定不超过,就一直往割点方向想,然而有向图割点是什么东西?然后又觉得是个最小割,但是不转对偶图可能很悬,转了又要判障碍来重新标号,感觉更恶心。结果写了一堆特判还是了。
,因为不管怎么走到一个点的距离是一定的,如果不连通就是,否则就是元素最少的那一层。另外,因为流量显然最大是,所以网络流复杂度是对的。。。。。(不知道为什么考场上那么蠢)
E. Petya and Construction Set
题意:给定个限制,表示号点和号点距离为,求构造一棵树满足所有要求。
这个很关键。首先假设限制是不增的,构造一棵“毛毛虫”,即一条链上挂一些单个的点,不能挂长的链。
首先把所有抽出来形成长为的链,按照限制从大到小排序,每次忘号节点上扔一个。特别的,如果扔到了结尾,则把这个新的点加入链。因为所以一定每次都是有接的。
FG
看不懂。
H. Tiles Placement
题意:给定一棵树和,求一种染色方案使得所有点颜色且任意一条长为的链颜色互不相同。
首先拎出来直径,依次染色,显然这是正确的,因为颜色直径互换互不影响,所以我们假设他们按顺序排列。然后每个点的颜色就都可以由直径或级祖先递推出来了,如果一个点级祖先在直径上且从直径两端的递推结果不同,那么无解。
为什么要拎直径呢?因为这样任何一个点的递推起点都会是直径往左或往右,只要每个点都满足关于直径的递推那么就是合法的,如果不是直径可以情况会很复杂。
欢乐模拟赛DAY5
总结:
感冒了。。。打到后面几乎自闭,大概就是的计算几何被各种乱搞搞过去了并且题解还咕咕咕了。
T1
题意:求最远异色点对。
可以搞,但是似乎邻远搜索是没有复杂度保证的。。。于是我看着不敢写,最后写了个奇怪的算法,大概就是二进制分组之后搞出俩凸包,强行旋转卡壳,如果当前转不动就看看往前扫能不能转动。
T2
咕咕咕
T3
咕咕咕
Codeforces Round #584
总结:
不会做,没得大众分,最后被叉了全面崩盘。。。
AB
太水了。
C
题意:给定一个数列,将其分成两个子序列,使得这两个子序列拎出来再接起来之后是单调不降的。
二分(原题值域过小可以枚举),较小一段的最大值,然后把所有的都接到第一个序列然后判合法性,然后把能接的都接上去,在判断第二个序列是否单调递增,复杂度。
D
题意:有个人,种零食,每个人有两种爱吃的零食,一个人来的时候会吃掉所有他能吃且爱吃的零食,如果他至少吃掉一个那么他会开心,求最优入队顺序使得开心的人最多,输出最多开心人数。
考虑点对我们在间连无向边,那么一个大小为的连通块满意人数最多是
,这是上界,因为第一个人要吃两个,构造方法是取该连通块的生成树,按照树的序来进队。
E
题意:给定一个的矩阵,每次可以旋转某一列,最后答案为每一行的最大值之和,求最大答案。
首先有用的部分只会有个,拎出来变成的矩阵,然后做子集,表示该行是否已经被某一列贡献过,每次转移,总复杂度。
G1
还是看不懂诶。。
题意:给定一个数列,每个元素是一种颜色,求最少染多少次色使得原数列变成若干个同色段,另外如果一个颜色为的点变了色,所有颜色的点都要被染色,代价是这种颜色的点的个数。
考虑一个“块”,它是一段区间其中若存在色点,那么所有色点都要在该块中,我们可以扫一遍把数列分成若干块,每个块的答案就是,复杂度
G2
带修改。
Codeforces Round #585
总结:
手速不够快,没有配备式的健壮板子,导致看出题正解却不能很快写出来,不过发挥还算可以喽。
C
题意:给定两个串,每次可以将两个串的某两个字符进行交换(位置可以不同),问最少几次交换后两个串相等。
首先和不管(表示上下两串当前位置都是,其它同理),然后个或者个是可以一次抵消的,一个和一个是可以花两次抵消的,无解就是和的奇偶性不同。
D
题意:两个人做填数游戏,可以填,有两块板,有些格子已经填了,共有(是偶数)个格子还是空着的,两块板分别有(为偶数)个格子,希望填完后两边和相等,希望不等,先手,双方轮流填,问谁必胜。
首先若两边都有空着的,可以直接抵消的操作,否则可以使得两次操作的增量和为,只要判断抵消完后差值是否等于剩余次数即可。
E
题意:和一样是变成若干同色连续段,把染色换成交换相邻元素,问最少几次交换。
咕咕咕
F
题意:型限制,且每个元素是个区间,要求求出的元素集合代表的区间有交,求一个合法的元素集合。
把区间按照左端点排序,然后每个点对其右端点的元素连边,这里可以线段树优化连边,但是会被卡空间,换成后缀优化连边就过了,复杂度瓶颈是排序和二分查找的,所以优化连边的方式不会影响时间复杂度。