口胡 2018.03.10【GDOI2018】模拟A组

那天我去了象征自由的组别,没有做这个组,但是这个组的题目还是很有意思的。

看了之后有很大启发,所以写一下。

T1【NOI2015模拟12.27】str:

Description:

这里写图片描述

第一问一看是个回文自动机的裸题。

但是你发现第二问用回文自动机有点难搞。

转换后相当于把一棵trie反过来求第k大。

因为后缀自动机的fail边是原串反向前缀树。

于是可得广义后缀自动机得fail边是反向trie的前缀树。

这样就好像可以搞了,这个不知道行不行,因为我也没打过。

题解是用manacher。

manacher+hash 搞出第一问的同时,再把合法串排个序,至于如何比较——SA就行了。

当然infleaking说之前他知道了一个黑方法。

在THUSC2018我去面试时,组委会好像觉得等待室的人太无聊了,所以yjq就去讲了讲这个方法(感觉错过了什么?):二分+hash搞出lcp,比较下一位。注意hash要预处理前缀和逆元。

比较都是log的,用什么随大爷便。

T2【NOI2015模拟1.10】黑白树:

Description:

给定一棵树,边的颜色为黑或白,初始时全部为白色。维护两个操作:
1. 查询 u 到根路径上的第一条黑色边的标号。
2. 将 u 到 v 路径上的所有边的颜色设为黑色。

1 <= n <= 10^6

树链剖分+zkw线段树强做应该可以过吧。。。

在线的话想到一种log较小的做法。

就是用一个并查集去维护黑边森林,对于一个修改,就一直往并查集的祖先往上跳,直到超过lca。

另一个并查集去维护白边森林,注意这个是按秩合并的,因为要支持删边,注意维护深度最小的点。

离线的话,对于白边森林可以倒着搞,删边变连边,log变α

infleaking说先求出每条边变黑的最早时间,接着按顺序用可持久化单调栈加二分求答案,常数较大。

T3 The Lazy Cow:

Description:

夏天很热,贝茜越发地懒散了。她想要使自己位于她的田里一个尽可能在短距离内够到美味的青草的位置。
贝茜的田里有N(1<= N <=100,000)片青草。第i 片有gi 单位的青草(1<=gi<=10,000),并且它唯一地位于田里坐标为(xi,yi)(0<= xi, yi<=1,000,000)的点。贝茜想要在田地里选一个点作为她的初始位置(可能和某一片青草的
位置重合,也可能初始位置的坐标并不是整数) 以便从这个位置出发走K(1<= K<= 2,000,000)步的距离以内有尽可能最多的青草。
当贝茜踏出一步,她从她现在的位置向北,南,东或西移动一单位距离。举个例子,为了从(0; 0) 走到(3; 2),贝茜总共需要5 步。但是贝茜不需要总是走整数步——例如,合起来的一步可以分为向北迈出的半步和向西迈出的半步。
请帮助贝茜确定,如果她选择了最佳的初始位置,她能够到的最大青草量。

看到曼哈顿果断菱形转矩形,(x,y)变为(x-y,x+y)

接下来就是最大矩形覆盖问题。

扫描线+线段树搞出每个点为顶点的答案,取max。

这题就比较裸了。

你可能感兴趣的:(Manacher,Hash,Suffix,array,Palindromic,Tree,树分治,并查集,扫描线)