第一次打马拉松。。
a
一看题。。什么鬼。。
n=4竟然是无解,第一个点给了一个n=5的,好像是构造的挺有规律的样子。。
那就偶数无解,奇数照着他的构造方法写一发吧。。
怎么a了?不管了。。
既然结束了还是要回来好好想一下是什么情况的。
偶数肯定是无解的,因为一共有
那么我们不妨把节点和颜色编号改为[0,n),然后令(i,j)的颜色是i+j mod n.
这样对于任意一个三元环(i,j,k)(
b
一开始没有考虑清楚边界情况,以为直接从n=0开始dp,前面的都塞满0就可以了,但是这样的话n=2的时候10就会是一个非法状态。所以说要从n=2或3开始dp才行。
c
显然零点有一个
结果一直过不了样例,调了半天发现把一个double写成int了。。交上去发现a了。。
结束了之后来考虑一下这是什么情况。。
于是又学了一遍三角函数。。最后发现原来这么大的式子根本毫无卵用。
d
显然答案的式子应该这么化:
我们单独考虑每一位
可以dfs序+主席树,但是常数太大T了。。后来发现直接在dfs的时候+bit就很好写。。
时间复杂度
e
对于每一个
若
这样k虽然看起来很大,但是没啥用直接模
先筛出每个数的最小质因子,然后h,g都可以暴力求,时间复杂度
f
考虑f(i,k)表示X部1~i个点匹配了k个,最大的Y部的节点是多少。
转移就是
那么考虑同一个i,对于k来说f显然是单增的。因为假如有f(i,k)≤f(i,k-1),那么考虑在f(i,k)的最优方案中,前k-1条匹配边一定 < f(i,k),那么就意味着f(i,k-1) < f(i,k),就产生矛盾了。
也就是说其实f(i,k)的转移是如果
那么就相当于是区间+1,单点修改,把一个数移到从一个地方移到另一个地方。就用splay/fhq treap维护一下就可以了。
很久没写splay了。。结果找前驱/后继的时候忘了pushdown调了一个小时。。
时间复杂度
总结:
①dp的时候一定要考虑好边界情况。
②一定要想清楚变量的类型int/long long/double.
③写代码的时候一定要考虑清楚。
④sin(x)的线性和还是sin(x).
⑤遍历树的时候一定要记得下传标记!