第一次打马拉松。。
a
一看题。。什么鬼。。
n=4竟然是无解,第一个点给了一个n=5的,好像是构造的挺有规律的样子。。
那就偶数无解,奇数照着他的构造方法写一发吧。。
怎么a了?不管了。。
既然结束了还是要回来好好想一下是什么情况的。
偶数肯定是无解的,因为一共有n(n−1)2条边,那么每种颜色的边出现次数相等的话,就意味着每条边应该出现n−12次,那么就要求n−1mod2≡0,所以n只能是奇数。
那么我们不妨把节点和颜色编号改为[0,n),然后令(i,j)的颜色是i+j mod n.
这样对于任意一个三元环(i,j,k)(i<j<k),它的边的颜色就是(i+j,j+k,i+k)。二者之间其实是可以一一映射的。如果边的颜色是(a,b,c),那么三元环就是(a+b−c2,a+c−b2,b+c−a2),而既然n是奇数,那么2就是有逆元的。
b
一开始没有考虑清楚边界情况,以为直接从n=0开始dp,前面的都塞满0就可以了,但是这样的话n=2的时候10就会是一个非法状态。所以说要从n=2或3开始dp才行。
c
显然零点有一个π的周期,然后我猜它在(0,π)是单调的,二分了一个零点。
结果一直过不了样例,调了半天发现把一个double写成int了。。交上去发现a了。。
结束了之后来考虑一下这是什么情况。。
于是又学了一遍三角函数。。最后发现原来这么大的式子根本毫无卵用。
∑k=1w(Asin(x+k)k+sin(k)+Bcos(x+k)k+cos(k))=∑k=1w(Ak+sin(k)(cosksinx+sinkcosx)+Bk+cos(k)(coskcosx−sinksinx))=asinx+bcosx=αsin(x+β)
也就是由辅助角公式的一个简单推论:sin(x)的线性和还是sin(x)。 d
显然答案的式子应该这么化:∑x∈subtree(v),v∈son(u)(size(u)−size(v))bit[depth[x]−depth[u]]
我们单独考虑每一位2k,显然如果在mod2k+1意义下运算这一位是不会变的。如果这一位是1的话,就意味着x−a∈[2k,2k+1)。那么就相当于是子树查询权值在一个范围里的数的个数。
可以dfs序+主席树,但是常数太大T了。。后来发现直接在dfs的时候+bit就很好写。。
时间复杂度O(nlog22n)
e
对于每一个g(i),枚举它的约数j,f(ij)会被贡献h(j)次。
若j=px11px22...,则h(j)=∏o(k+xo−1k−1).
这样k虽然看起来很大,但是没啥用直接模109+7就行。
先筛出每个数的最小质因子,然后h,g都可以暴力求,时间复杂度O(nlogn).
f
考虑f(i,k)表示X部1~i个点匹配了k个,最大的Y部的节点是多少。
转移就是
f(i,k)=min{f(i−1,k)li,f(i−1,k−1)<lif(i−1,k−1)+1,f(i−1,k−1)∈[li,ri)}
那么考虑同一个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)的转移是如果f(i−1,k−1)∈[li,ri),就一定有f(i,k)=f(i−1,k−1)+1,因为f(i−1,k−1)+1≤f(i−1,k);否则如果f(i−1,k−1)<li&&f(i−1,k)≥li,就一定有f(i,k)=li.
那么就相当于是区间+1,单点修改,把一个数移到从一个地方移到另一个地方。就用splay/fhq treap维护一下就可以了。
很久没写splay了。。结果找前驱/后继的时候忘了pushdown调了一个小时。。
时间复杂度O(nlogn),结果跑了2s+…
总结:
①dp的时候一定要考虑好边界情况。
②一定要想清楚变量的类型int/long long/double.
③写代码的时候一定要考虑清楚。
④sin(x)的线性和还是sin(x).
⑤遍历树的时候一定要记得下传标记!


1574

被折叠的 条评论
为什么被折叠?



