打出来了前四题,我菜就多练。
A
题目描述
一个数合法当且仅当在十进制下没有相邻两个字符是相同的。
问第 \(K(K\leqslant 10^{12})\) 小的合法的正整数。
思路点拨
考虑十进制下长度为 \(i\) 的合法数字由 \(9^i\) 个,那么我们容易确定答案数字的位数,接下来一位一位填就可以。
时间复杂度 \(O(T\log_{10}K)\) 。
B
问题描述
二维平面内又 \(n\) 个不同的点。问可以组成多少个不退化的三角形(每一个节点只可以被使用一次)。
不退化的三角形就是三点不共线的三角形。
思路点拨
这个问题可以随机化。
考虑随机打乱顺序,然后每一次选择字典序最小且合法的 \((i,j,k)\) 作为三角形确定下来。
将这个算法运算直到时间大于 \(0.9\) 秒输出答案最大值。
C
问题描述
给你一个由 \(1\) 到 \(N\) 的整数组成的排列 \(P=(P_1,P_2,\dots,P_N)\)。
对于每个 \(i=1,2,\dots,N\),打印满足以下所有条件的一对整数 \((l,r)\) 的 \(r-l+1\) 的最小值。如果不存在这样的 \((l,r)\),则打印 -1
。
- \(1 \leq l \leq i \leq r \leq N\)
- \(r-l+1\) 是奇数。
- \(P\) 的连续子序列 \((P_l,P_{l+1},\dots,P_r)\) 的中位数不是 \(P_i\) 。
思路点拨
考虑对于单个位置 \(i\) 求值。我们认为 \(b_i=0\) 。对于 \(j \neq i\) ,认为 \(b_j=(a_j<a_i)\) 。对于一个长度为奇数且包含 \(i\) 的区间 \(l,r\) 合法当且仅当 \(sum_{i=l}^r b_i \neq 0\) 。
容易知道对于 \(i\) 存在 \(L\leqslant i \leqslant R\) 使得 \(l \in [L,i],r\in [i,R]\) 都有 \([l,r]\) 不合法。举个例子,\(b=\{-1,-1,1,-1,1,0,-1,1,-1,-1\}\) 就是 \(L=2,R=9\) 。可以二分这个上下界(判断合法可以使用hash),然后答案分类讨论一下。
现在需要求出全部的 \(i\) 的答案,考虑按照 \(a_i\) 从小到达来求,在二分的时候需要区间hash并且支持动态修改,可以线段树维护一下。时间复杂度 \(O(n \log^2 n)\) 。
D
题目描述
给你一个简单有向图 \(G\),其中有 \(N\) 个顶点和 \(M\) 条边。顶点的编号从 \(1\) 到 \(N\),每条边都标有(
或)
。
在这个图中,对于任意两个顶点 \(s\) 和 \(t\),都有一条从 \(s\) 到 \(t\) 的路径。
请判断在图 \(G\) 中是否存在满足以下所有条件的路径:
- 行走的起点和终点顶点相同。
- 对于 \(i=1,2,\dots,M\),第 \(i\) 条边在行走过程中至少使用了一次。
- 将行走过程中使用的边的标签按照使用顺序排列得到的字符串是一个正则括号序列。
思路点拨
很有意思的题目,可能我也只会这种简单题了吧。。。
认为一条边是 (
权值为 \(1\) 不然就是 \(-1\) 。那么一个环合法就是不存在任意时刻走过的边的边权和为负数并且最终边权和为 \(0\) 。我们可以注意到在这个过程中,任意时刻的边权和不会超过 \(n\) ,至于为什么,我猜的。
考虑建立一个分层图,\(f_{i,j}\) 表示目前在 \(i\) 节点,边权和为 \(j\) 。和 \(f_{x,0}\) 在同一个强连通分量内的状态我们可以使用tarjan求出来,这样就可以知道从 \(x\) 出发的环可以扩展那些边并回到 \(x\),同时我们就知道了可以扩展到哪些点。
最终我们从 \(1\) 号节点开始bfs一遍,不断扩展知道无法扩展为止。如果存在一条边没有被扩展到就是无解了,算法正确性显然(除了那个猜的结论)。
标签:dots,code,报告,ARC173,边权,合法,leq,解题,可以 From: https://www.cnblogs.com/Diavolo/p/18065032