赤橙黄绿
不妨假设 \(n\leq m\)。
不妨先考虑 \(n\not=m\) 的情况,此时 \(X\in [1,n+m-1]\)。
对于 \(X\leq m\),下界为 \(X\),上界为 \((X-1)n+1\),下界的取到的构造是在一行填 \(X\) 个,上界的取到的构造是对于每个数 \(i< X\),选择一个之前没有出现过的 \(k\),填 \((j,j+k)\) 对于所有 \(1\leq j\leq n\),容易发现填进去的数恰好为 \(i\),横坐标如果超过 \(m\) 视作循环,然后随便找一个位置填 \(X\)。中间的取值可以在上界删掉一些位置取到。
对于 \(X>m\) 的情况,下界是 \((X-m)n+1\),上界是 \(nm\)。下界的构造是空出一列剩下循环,因为 \(n\not =m\) 一定能取到,上界的构造是在下界后面随便填,但是每行要先填之前空出的一列以防值 \(=X\)。
然后考虑 \(n=m\) 的情况,\(X\leq m\) 是一样的,但是现在 \(X\) 取不到 \(n+m-1\) 了,只能取 \(n+m-2\)。同时下界的构造也是一样的,但是上界会有问题。
经过一定的手玩可以发现, \(X=n+1\) 与 \(X=n+m-2\) 的情况的上界是 \(nm-1\),其余情况上界是 \(nm\)。\(nm-1\) 的构造与之前构造类似,\(nm\) 的构造比较复杂,但是可以通过一个 \(n=5,X=7\) 例子描述:
1 2 3 4 5
4 1 2 3 6
3 4 1 2 7
5 6 4 1 2
2 3 5 6 1
大概就是前面正常填,最后两行交换特殊处理一下。然后就做完了。
青与兰
感觉是很牛的题啊!
假设我们找到了最后的那个点 \(P\),然后找了一个方向 \(\vec{t}\) 作为 \(x\) 轴,其垂直方向作为 \(y\) 轴,则将第一象限和第三象限匹配,第二象限和第四象限匹配一定满足条件。
我们就钦定一定要这么匹配。假设确定了这个方向 \(\vec{t}\),则 \(x\) 轴会将所有点分成相等的两边,\(y\) 轴也是,于是 \(P\) 就确定了,整个划分方案也就确定了。
现在第一象限的点数等于第三象限的点数,第二象限的点数等于第四象限的点数。定义一个方向 \(\theta\) 的权值 \(c(\theta)\) 为第一象限的兰点减去第三象限的青点,这等于第四象限的兰点减去第二象限的青点,也即 \(c(\theta)=-c(\theta+\frac{\pi}{2})\)。
我们的目标是找一个 \(c(\theta)=0\) 的 \(\theta\),考虑在 \([0,\frac{\pi}{2}]\) 中二分找到这个角度,因为一端权值是正的一端是负的,并且对于点随机扰动之后函数值的变化是连续的,因此一定存在一个零点,01 二分即可。
求出 \(P\) 点的过程只需要找中位数,时间复杂度 \(O(\sum n\log \frac{1}{\epsilon})\)。
黑与紫
首先考虑确定根节点怎么构造。从根节点开始 BFS,要求每个点一定有一条指向深度更小的点,这条边就是 fail 树上的边,剩下的就是 Trie 树上的边。这样就可以根据 Trie 树边和 fail 树边找到所有边的等价关系,标定权值以后用主席树重新建立 AC 自动机看看是否一致即可,以及还要判一大堆细节。
这个判定方法实在过于复杂,于是我们希望只判定 \(O(1)\) 个可能的根节点。
考虑根节点和根节点的儿子,其之间会是两条互相指向的有向边。将所有这样的有向边拉出来建立一个图,不妨令图上全是无向边,则一条无向边连接的两个点如果均不是根节点,则这两个点代表的字符串应该是全部一样的。那么所有这样的边应该会构成形如一个菊花每个儿子替换成一条链的形态。
如果一个点的度数 \(\geq 3\),则只能是这个点是根节点,如果没有这样的边是无解的,那么现在只剩下一条链的情况。考虑找一个链上的点 \(u\) 指向了另一个不在链上的点 \(v\),则 \(v\) 会有一条出边指向另一个链上的点,则根节点只能在这个点以及链上的前驱和后继中选取,这样就只需要判定 \(O(1)\) 个点。如果不存在这样的点那么链上的每个点都是可以作为根节点的。
时间复杂度 \(O(n\log n)\),如果你有兴趣的话其实是可以做到 \(O(n)\) 的(
标签:CTT,leq,Public,构造,Day,上界,象限,theta,节点 From: https://www.cnblogs.com/275307894a/p/18572962