随笔分类 - 2020牛客暑期多校训练营
摘要:J. The Escape Plan of Groundhog 首先这道题肯定只能来写,暴力来求的话是,那么我们只需要优化一个就好了。 优化的方法是用一个枚举子矩形宽的长度,然后再依次遍历每一行,首先要满足要求(两条高上的点需要全是1),下底的点全为1,最后一
阅读全文
摘要:J. Pointer Analysis 读题的时候一定要仔细啊…比赛的时候读错题,写了半天都是 wa 的 其实只要把思路理清了,实现起来就很方便了。 对于每一个大写字母,只需要保存其可指向的对象即可,因为最多只有26个,因此直接用状态压缩即可,而且对于合并操作也很方便。 // Created by
阅读全文
摘要:B. Binary Vector 的意思是随机生成 n 个 n 维向量,这 n 个向量线性无关的概率。 线性无关指的是向量之间不能相互表示,既不存在解(至少要有一个 k 非0)使得这个式子成立。 依次选取n个向量: 第一个向量非零即可,有$2n
阅读全文
摘要:C. Count New String 参考:Count New String(广义SAM) 把所有的字符串都存进去,然后再求出不同的子串个数即可。 // Created by CAD #include <bits/stdc++.h> #define ll long long using names
阅读全文
摘要:G. Operating on a Graph 这道题需要注意的点是,合并的时候需要用链表进行合并或者用 vector 启发式合并,这样才不至于复杂度过大,另外,去重的时候,如果用哈希 map 会导致超时,而用 map 则不会 // Created by CAD #include <bi
阅读全文
摘要:C. Operation Love 先判断给定点是顺时针还是逆时针,然后再判断长度为6的边是在长度为9的边的左边还是右边即可 // Created by CAD #include <bits/stdc++.h> using namespace std; bool judge(vector<doubl
阅读全文
摘要:G. Greater and Greater 参考:2020牛客多校第二场 G题Greater and Greater(bitset) 要仔细观察规律,当看不出规律的时候,可以试着排序一下,看看能不能进行优化。 bitset 运算的复杂度为,可以加快运算速度 // Created
阅读全文
摘要:A. All with Pairs 参考:A. All with Pairs (哈希值+next) 需要用到的东西是字符串哈希和前缀数组。 首先用字符串哈希将每一个后缀都统计一下,并用不同的后缀会映射为不同的哈希值,所以这样就可以在的时间复杂度内比较出两个字符串是否一样。 还要考虑到的事
阅读全文
摘要:A. B-Suffix Array 参考:2020年牛客多校A题 将字符串化为B数组之后,会发现,它其实是由两部分组成的。例如aaaabaaab的B数组为011102114,那么我们可以将B拆成两半,前面一部分是01110,后面一部分是2114。我们会发现,所有长度的B数组前面部分的格式都是一样的,
阅读全文
摘要:I. 1 or 2 依次遍历所有的点,对于遍历的当前点,选择所需的边,直到度数饱和。当遍历点的序号 大于n时,则证明该解法时是可行的。 但是要注意的时候,遍历之前需要将节点按照邻接表的大小进行排序,这样时间复杂度会低一点。 解法也算是暴力吧,只不过优化了一下。 // Created by CAD o
阅读全文
摘要:Boundary 参考:2020牛客多校(第二场) B. Boundary (计算几何) 因为三点确定一个圆,其中原点是固定的,所以只用遍历另两个点就可以了。这样复杂度是的。另外还要用一个 map 来保存所有的圆心,以此来统计相同的圆心的个数。 要注意的是判断三点一线的情况,这种情况
阅读全文
摘要:Fake Maxpooling 在初始化数组的时候如果直接求可能会t,所以用这种筛法,把复杂度降为,最后用单调队列来维护区间最大值。 for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(!a[i][j]) for(int k=1;k*i<=n&
阅读全文
摘要:Cover the Tree 就当作是一个结论吧…当要用链覆盖所有的边时,对叶子节点根据dfs序排序后,根据的配对规则进行配对即可,如果有奇数个叶子节点,则将其与根节点相连。 // Created by CAD on 2020/7/13. #include <bits/stdc
阅读全文