2022.07.15 zrNOI模拟赛总结
1.时间安排
8:00~8:20 看题面
T1:字符串题,求两个01串一个取前缀一个取后缀能拼出来的本质不同串个数,应该是毒瘤数据结构(居然只给0.5s时限),有10分白给,也许存在什么 \(O(n^2|S|)\) 的算法。
T2:998244353题,树的同构计数,只会爆搜和菊花图,鉴定为:不可做。
T3:图上题,最小化从1号点出发的两条不交路径权和,一眼费用流,还有30分只需要判断是否存在两条不交路径可以思考。
8:20~8:40
写完T1的暴力,对其他分档没什么想法。
8:40~9:40
T2的暴力真麻烦……光判不合法都要写一堆东西。
会出现树同构的现象,不过数据小直接懒人暴力hash。
调了很久终于没问题,顺手把菊花的情况写了,答案只可能为0/1判合法即可。
想了想链怎么写,没思路。
9:40~11:30
T3费用流调了很久,才发现是数组调用错了……
想了想只需要判是否存在两条不交路径,似乎可以网络流,但是数据有1e5,而且后面发现这个方法假了。
试着想图上的DP这类的,也没思路、
11:30~13:00
吃完饭,开摆。
result:
T1:10 T2:20 T3:40
2.总结
T1:
计算几何基础题,感谢J神的计算几何基础知识科普Orz。
只要知道点积就可以了。
首先可以发现01可以看做是分解线,设两个串是s和t,考虑枚举s选0的个数,用t的1当分界线,显然每种选0的方案都对应了t中1的个数个方案,并且不重复,s选1和t选0同理,注意空串被统计了两次,所以题目的f函数即为
忽略减一,这就是个点积的形式 \(dot(\vec{a}, \vec{b})=a_x*b_y+a_y*b_x\)。
考虑点积的几何意义是\(\vec{a}\)在\(\vec{b}\)上的投影乘\(|\vec{b}|\),如果把\(\vec{b}\)维护成一个凸壳的形式,会发现凸壳内的点一定不会优于凸壳上的点。
所以把\(n\)个串维护成凸壳,每次询问在凸壳上二分即可。
细节很多,需要特别注意。
T2:
没判连通性丢了10分,输麻了。
L神打表发现链的情况因为保证一定有解,所以奇数输出2,偶数输出1,%%%。
正解是树自同构计数,还不懂。
(待upd)
T3:
%%%J神支配树75分
容易发现一个点不合法当且仅当在他到支配树根上存在一个支配边。
把边也看做点,加进去一起跑支配树。
最后直接从树根往下递推即可,注意与1不连通的点也是不合法的。
正解是最短路优化建图,不会(据说这题是tarjan的论文题,寄)
(待upd)

浙公网安备 33010602011771号