省选模拟63

A. 大佬的难题

题意:三维都是排列的三位偏序问题。n<=2e6
CDQ 两个log过不去
dy讲过的题。
考虑容斥,设A为满足\([a_i<a_j]\)条件的二元组个数,B C同理
要求\(A\cap B\cap C\)
根据\(A\cup B\cup C=A+B+C-A\cap B-A\cap C-B\cap C+A\cap B\cap C\)
\(A\cup B\cup C=n(n-1)-(-A\cap B\cap C)=n(n-1)-A\cap B\cap C\)
然后计算二维偏序。

B. 回文串

发现变换中出现的串就是两个子串缩前缀到长度lcs过程中的子串(只考虑r方向)。
暴力hash+map随便搞,考虑不那么暴力的结构。
先不考虑add操作
建出回文树,每个点附上权值len*|right|,那么询问就是树上两条路径的并的权值
其实这我想麻烦了,只要判断len[lca]和lcs(lcp)的关系就行,因为lca及以上一定都是lcs中的串了。然后这个判断只要比较s[r-len[lca]]是否相同
现在多了add操作,对于增量建图的回文树来说在线不太现实。
把操作离线,在最后的串上跑Pam建树,这里有个优化是正串和反串的回文树形态相同(因为对称),所以正串建完得编号,然后直接在上面跑反串得编号。
需要保证当前未扩展到的点没有权值,这个只要让修改区间长<=\(nowlen\),倍增跳。
树链剖分维护,复杂度两个log

C. 营养餐

树上阶梯nim博弈的变形。
阶梯nim博弈:n堆石子,合法操作为在i堆取>=1个石子放入i-1堆,若i=1则直接移出。先手必胜的充要条件为奇数编号的堆的石子个数异或和不为零。
证明:
把从奇堆中取石子视为nim博弈中的拿走,放入偶堆视为丢弃,局面为各奇堆中的石子数。
若对手操作奇堆,那我跟着按照nim博弈的最优策略操作奇堆,相当于两个人在进行普通的nim博弈。
若对手操作偶堆,假设在i向i-1移动石子数为x,那我在i-1把x个石子移动到i-2,局面不变,且在i=2时(最后一步)主动权在我手中。

关于为何不是偶堆异或和,考虑最后一步。

阶梯nim博弈在树上依然成立,数量不守恒也可以。要求奇数深度的堆异或和

回到本题,设\(num_i=a_i-\sum\limits_{j\in child_i}a_jb_j\)
根据题限\(num>=0\)
如果把\(num\)看作石子,在\(i\)取走\(x\)个,\(i\)\(x\)\(fa_i\)\(b_ix\)
注意\(b_i=0\)时对父亲没有影响,要看作根。
于是对每棵树单独求,由于是独立的公平游戏,森林再异或起来判断。

posted @ 2020-04-05 22:15  hzoi_yzh  阅读(84)  评论(0编辑  收藏  举报