test20190904 JKlover】的更多相关文章

100+100+100=300.最后十分钟极限翻盘. 树链剖分 给一棵以1为根的有根树,开始只有1有标记. 每次操作可以给某个点打上标记,或者询问从某个点开始向上跳,遇到的第一个有标记的点. 对于 100% 的数据, n ≤ 106, m ≤ 5 × 106. 题解 若把查询看成找树根, 发现打标记的操作相当于断边. 那么倒着做就相当于加边了.于是用并查集维护即可. 注意一些特殊情况:给1打标记,重复打标记. 天气之子 有 n 个人依次进入观影厅, 观看 Weathering with You…
100+65+100=265,T2就差了一点. 乌合之众 给出一个 n × n 的, 元素为自然数的矩阵.这个矩阵有许许多多个子矩阵, 定义它的所有子矩阵形成的集合为 S . 对于一个矩阵 k , 定义 f(k) 为 k 中所有元素的 AND 值 (按位与). 对于一个矩阵 k , 定义 g(k) 为 k 中所有元素的 OR 值 (按位或). 请求出所有子矩阵的 f(k) 之和与所有子矩阵的 g(k) 之和, 即 ∑k∈Sf(k) 与 ∑k∈Sg(k) . 由于答案可能很大, 只需要输出答案对…
题目链接:传送门 思路: 计数.树的结构和边权的计数可以分开讨论. ①假设从a到b的路径上有e条边,那么路径上就有e-1个点.构造这条路径上的点有$A_{n-2}^{e-1}$种方案: ②这条路径的权值的选择,可以用隔板法来做,相当于用e-1个隔板分开m个球,要求每个区间至少有一个球,那么就相当于在m-1个间隙里插入e-1个隔板,有$C_{m-1}^{e-1}$种方案: ③在路径之外的点还有n-e-1个,对应有n-e-1条边,每条边的权值可取[1, m],所以有mn-e-1种方案: ④在路径之外…
分析 这题我们先转化为图论模型,发现求的其实就是有向图中以1为根的生成树数量.而关于这一问题存在O(3^n * n^2)的算法,一看数据n=250,发现不行.于是需要更高效的算法--Matrix-Tree 算法.这个算法是O(n^3 * logn)的,满足要求.至于Matrix-Tree 算法是什么,自己去学,我只分析这题的解法. 快速求解行列式 利用费马小定理来消元,把矩阵消成上三角 由于a[i][i]^(p-1) mod p=1 所以我们设法让a[j][i]乘上(1-a[i][i]^(p-1…
题意 In an edge-weighted tree, the xor-length of a path p is defined as the xor sum of the weights of edges on p: \[ _{xor}length(p)=\oplus_{e \in p}w(e) \] \(⊕\) is the xor operator. We say a path the xor-longest path if it has the largest xor-length.…
题意 在给定的 \(N\) 个整数 \(A_1,A_2,-,A_N\) 中选出两个进行异或运算,得到的结果最大是多少? 对于 \(100\%\) 的数据,\(1\le N\le 10^5, 0\le A_i <2^{31}\) 分析 参照jklover的题解. 使用 Trie 树,将每个数看做一个长度为 32 的字符串插入 Trie 树中. 每次插入前贪心找异或最大值即可. 时间复杂度:线性. 代码 询问的时候,要保证至少插入了一个,须要先插入后后询问.这份代码按道理就是错的,ans在进行第一次…
题意 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有 n 个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集的过程中,同学们不希望有重复的雪花.你可以从任意 a 时刻开始,在 b 时刻停止. a 到 b 时刻中间的雪花也都将被收集.他们希望收集的雪花最多. \(1≤n≤10^6,0≤x_i≤10^9\) 分析 参照jklover的题解. 首先需要离散化或hash,将值域控制在1e6的级别. 然后,若直接上主席树,每次二分答案,枚举…
题意 给定一个字符串 S,先将字符串 S 复制一次(变成双倍快乐),得到字符串 T,然后在 T 中插入一个字符,得到字符串 U. 给出字符串 U,重新构造出字符串 S. 所有字符串只包含大写英文字母. 分析 参照jklover的题解. 此题使用hash十分简单,直接枚举每个前缀,与长度相等的后缀比较即可. 时间复杂度:线性. 代码 哈希的计算方法很妙. #include<bits/stdc++.h> #define rg register #define il inline #define c…
题意 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需要支持 2 种操作: add(s) 表示新加入一本书名为 s 的图书. find(s) 表示查询是否存在一本书名为 s 的图书. 分析 参照jklover的题解. 将每个字符串通过计算hash转化为整数,开一个桶记录是否出现过即可. 代码 这程序连样例都过不了还能A题? #include<bits/st…