【2019暑假集训】08.05比赛总结+HduACM
传送门
这么多天一来第一次做省选组,居然登顶了
比赛思路
- T1(有趣的数):直接数位DP似乎会T,逐渐丧失自信。。。
- T2(可见的点):找规律+莫比乌斯反演+整除分块,感jio还行。
- T3(精明的壕):看错题目++,最后十分钟上了暴力,似乎有40.
赛后消化
- T1居然过了,暴力=正解。
- T2看似伪的代码(多了个n的复杂度)却过了。
- T3自闭了,数组开小只有十分。正解比较好理解,但是实现???一开始看错大小于符号,发现之前打了2个小时的二分萎了,然后想线段树,有一点复杂却要log方,最后求助楼上的dh后发现可以从后往前扫,还不用二分???然后套个set就又短又快了。
HduACM( 2019 Multi-University Training Contest 5)
- 中午不睡觉,精神百倍刚题目(lyl因此成功被降智)
- 一上来就看榜(因为吃饭已经过了半个小时),然后顺着榜我们比较轻松地做了4道题。
- 1004:枚举分界点,解绝对值方程
- 1005:暴力枚举排列
- 1006:exkmp
- 1007:找性质+DP
- 两个小时后,我们将精力集中到了下一个较多人切的1002——
1002.three arrays
可重新排列数组a,b,令c[i]=a[i]^b[i],求最小字典序的c (n<=1e5; ai,bi,ci<=230)
- 我并没有什么想法,一定是按位贪心,但是匹配trie上 的x和y如果有多种走法(同时向右或向左),由于接下来的走法不知道,所以很难贪心下一步。
- 然后古爷就通过这个基本思想,想出了正解。。。
- 既然接下来的走法不知道,我们就记忆化出接下来的走法的最小值。
- 有一个简单且重要的贪心策略:x和y若同时可以向左或向右走,比较哪一边走能得到的结果更小,并走下去,若相等则随便一个都可以(因为此时不走之后也会走,保证字典序最小)。如果并不能同时走,则只有一种走法。
- 通过这种贪心策略不难发现每一个点的走法是固定的。所以每一个A树中的x也唯一对应一个B树中的y。
- 所以可以将y和x绑定到一起,这样子的话记忆化的状态就是O(n)的了。
- 实际上,在最初的想法的贪心中,有可能同时走两边,既然如此,我们不妨走下去。
- 即使我们最后在选最小值的时候不选这一条路,但是我们也不会影响到这一条路,相对而言这条路的答案就是固定的,通过记忆化记录下来就能避免多余的搜索。
- 在选好之后删除操作直接将当前叶子到根的路径上的点的所有记忆化清空就好了。
- 这样子多出来的空白的点(也就是要重新遍历的点)只会有log个,时间复杂度就可以保证了。