今天感jio还8错,然而原题都没有切。。。
比赛思路
- T1(card):刚开始想了二十分钟的先确定方案再调整的思路,但是这个做法看上去是O(n)的并且我也不会。。。然后就转而看准n<=1e3这个关键的东西,再加上字典序,很容易想到按顺序贪心取,对于每一个位置选择的时候看看是否往下一定能满足答案。
- 这样子的话不难得到一个n3的做法,但是要求的只是在当前牌中去掉一张牌后的最大答案,所以只需要在枚举最大的牌之前,O(n)预处理出哪些牌去掉后对答案有-1的贡献就好了。
- T2(line):这不是显然二分吗,然后确定直线的斜率之后就变成计数了,对于一个点来说,要求在它的水平线旋转一个固定角度的一个平面内的点的个数。容斥一下就是在这个旋转后直线的右手方向的点个数减去当前再右手方向并且在当前点下面的点的个数。按照经过每一个点的直线与x轴交点排序,后者用离散后树状数组就好了。注意共线的情况。
- T3(graph):发现之前做过。想不出来怎么做。心态崩了Orz。
赛后消化
- 根据lyl的强大印象,T3原来是半年前的周六做的题目,JZOJ6122。找到之后发现当时我也切了,现在却不会了Orz。
- T3如果按照编号从大往小涂色,那么当前点的所有往后的边指向的点之间都有连边,那么这些点的颜色都不一样。
- 答案就是 ∏ n − g i \prod n-g_i ∏n−gi, g i g_i gi表示在与i向后的边的个数。
- 现在只需要求度数。
- 从前往后,合并相连点集,将i的集合合并到i连向的编号最小的点的集合中。显然这样子是可以不遗漏地转移相邻的点的。
- set维护,启发式合并就可以做到 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)
总结
- 对于题目的理解和消化还是不够扎实。而且面对原题也不能松懈,有的时候也不一定能够做出来。
- 对于T3这种跟编号有关的题目一定要根据编号的大小的顺序去找一找性质。