【总结】COCI2020-2021#6
2020/7/14
T1 : Bold
一眼模拟,略
T2 : Alias
大概是个最短路板子,字符串直接 map 处理
T3 : Anagramistica
不难看出相似的定义就是将字符串的字符从小到大排序后相等即为相似。
然后哈希一下,对于哈希值相同的我们称为一组。
显然只有一组内能对 \(k\) 产生贡献,我们定义 \(f[i][j]\) 表示前面 \(i\) 个组,当前有 \(j\) 对的方案数。
不难发现这是个分组背包,第一维可以略掉,直接跑可以做到 \(\mathcal{O}(N^2)\) 的复杂度。
T5 : Index
显然这个答案可二分。
二分答案后,我们只用求区间 \([l,r]\) 中 \(\ge mid\) 的数个数。
主席树模板,时间复杂度 \(\mathcal{O}(N\log^2N)\)。二分可以放到主席树上做到 \(\mathcal{O}(N\log N)\),不过本题的数据范围应该不需要。
T4 : Geometrija
我说这比赛不讲武德一个计算几何糊脸上。
直接暴力计算 \(\mathcal{O}(N^4)\) \(20\) 分就有了。
考虑对一条边计算是否有边和它相交,显然这条线段所在直线将平面上的点分成两部分,我们要在两边各找一个点作为线段端点。
极角排序后可以直接双指针扫一遍。复杂度 \(\mathcal{O}(N^3\log)\)。
细节可以第一维排序第二维 set ,貌似也可以两个维度分别排序然后合并。
但是还是过不去,考虑优化一下。
手算一下发现答案不会很大,貌似不会超过 \(2N\) ?
首先凸包上的线段一定是满足条件的。
考虑先求出凸包,然后将凸包删去。再求出凸包,然后在两个凸包中连边,使得连边不相交,朴素维护。一直到所有点都删完,大概是 \(\mathcal{O}(N^2)\) 的复杂度。
显然只有凸包上的边和两层凸包之间连的边可能对答案有贡献。而这是张平面图边数是最多是 \(3N-6\)。
赛后翻了下题解发现这是个叫三角剖分的东西(,不过可以做到 \(N\log N\) ,自己 yy 的 \(N^2\) 做法没啥用啊。
还有个直接数数的方法好神啊 Orz