摘要: 传送门(vjudge) 解题思路 注意到 \(a_i\) 的范围很小,是1000~2000之间,于是我们可以直观感受到k一定不会特别大,推一下可以得出 k 最多大概在四五百左右,于是可以直接考虑 dp[i][j] 为前 i 个数里面选了 j 个分割点,且第 i 个数是分割点的最小代价。 转移要分两种 阅读全文
posted @ 2024-04-29 17:23 尹昱钦 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 直接二分能干掉的人数,然后check函数枚举所有区间,因为 m 很小,所以可以用 m 个ST表预处理每个区间对应每个属性的最大值。 一是需要注意二分的写法,而是注意check(0)时候的特判。 AC代码 #include<iostream> #include<algorithm> 阅读全文
posted @ 2024-02-29 10:31 尹昱钦 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 把每个国家的城市看成一条链。 那么建桥操作相当于将两条链的某处断开,然后交换断点后面的部分。 查询操作就是从链首开始找到链尾属于哪个国家。 这些操作可以由Splay平衡树来维护。 相当于开n个平衡树。 但是总点数O(NM)会爆炸,所以我们考虑实际用到的点只有O(N+Q),所以每个点 阅读全文
posted @ 2024-02-28 23:39 尹昱钦 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 对于每个人的棋子,总是最高的那个棋子发挥决定性作用,被消耗后,再看剩下的最高的棋子。这就相当于单调不递增栈的维护过程。 最后就要比较两个人的单调不递增栈是否完全相同。 和经典的楼房重建相似,但是这个题不止需要维护单调栈的长度,还要维护哈希值。 我是分开写的,但是实际上可以直接用pa 阅读全文
posted @ 2024-02-27 20:58 尹昱钦 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 动态维护区间里面单调递增斜率的长度 需要维护两个信息:上述长度,和区间最大值(合并时需要) 难点在于两个子区间的合并。 左区间的楼房一定都能看见(没有遮挡),所以要在右区间二分,找到左面最大值 lmax 在右区间的位置,然后进行合并。 复杂度两个log。 AC代码 #include 阅读全文
posted @ 2024-02-25 11:36 尹昱钦 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 写起来简单无比,不比 Tarjan 香? 方法 按照[1...n]的顺序在反图(边方向相反)上dfs一遍,出栈时将节点存入数组q[1...n]中 按照q[n...1]的顺序在原图上dfs一遍,每次遍历就是一个新的强联通分量 为什么是正确的? 核心在于封死连通分量往外走的路。 如果原图u-->v有一条 阅读全文
posted @ 2023-12-07 19:42 尹昱钦 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 字符串哈希 [OI-Wiki](字符串哈希 - OI Wiki (oi-wiki.org)) 分为两种哈希方式:以左为高位 和 以右为高位 如果只是快速查询每个字串的哈希值,用以左为高位比较简单,即 \[Hash[l...r]=Hash[1...r]-Hash[1...(l-1)]\times ba 阅读全文
posted @ 2023-12-03 14:17 尹昱钦 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 叉乘(叉积) 定义(二维): \[\vec{p_1} \times \vec{p_2} = x_1y_2-x_2y_1=-\vec{p_2}\times\vec{p_1} \]性质: 若 \(\vec{p_2}\) 在 \(\vec{p_1}\) 的逆时针方向,则结果大于 0 。 若 \(\vec{ 阅读全文
posted @ 2023-12-03 13:51 尹昱钦 阅读(8) 评论(2) 推荐(1) 编辑
摘要: 传送门 解题思路 关于Prufer序列的构造,见OI-wiki 这里直接放结论: 一个Prufer序列与一个无根树一一对应 度数为 \(d_i\) 的节点在序列中出现了 \(d_i-1\) 次 \(\sum(d_i-1)=n-2\) n个点的完全图的生成树有 \(n^{n-2}\) 种 所以相当于 阅读全文
posted @ 2023-11-01 20:56 尹昱钦 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 比赛链接 D - Square Permutation 其实比较简单,但是比赛时候脑子不转了,竟然在尝试枚举全排列,然后算了一下复杂度直接不会做了。 正解应该是枚举完全平方数,底数枚举到 \(sqrt(10^{14})\) 即可,因为 n 最大为 13。 然后统计一下这个完全平方数各个数字出现了多少 阅读全文
posted @ 2023-10-15 16:28 尹昱钦 阅读(32) 评论(0) 推荐(0) 编辑
摘要: [比赛链接] A. Don't Try to Count 直接用string的可加性,每次 s+=s 相当于翻倍了,因为 \(nm<=25\) 所以最多翻倍5次。 判断什么的直接模拟就行。 #include<iostream> #include<algorithm> #include<cmath> 阅读全文
posted @ 2023-10-15 14:25 尹昱钦 阅读(190) 评论(1) 推荐(1) 编辑
摘要: 比赛链接 A - Replace C or Swap AB 个人感觉挺有意思的一道思维题(好久没做思维题了,竟然卡了一个小时)。 除去C不看,我们发现X序列中的A只能向后移动,B只能向前移动,且可以移动任意次数。 所以假如没有C的话,做法是这样的: 从前往后分别统计X和Y序列中的A的数目,若某一时刻 阅读全文
posted @ 2023-10-09 00:02 尹昱钦 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 就此告别吧 水上的列车就快到站 开往未来的路上 没有人会再回返 说声再见吧 就算留恋也不要回头看 在那大海的彼端 一定有空濛的彼岸 NOIP挂了之后第一次回到这台电脑前,当然很可能也是最后一次 很巧的是,今天也是我选择放弃省选的日子 然后又看到了xhy留下的present 深有感触 原谅我 在他的礼 阅读全文
posted @ 2023-09-01 00:03 尹昱钦 阅读(56) 评论(3) 推荐(1) 编辑
摘要: 传送门 解题思路 直接用洛谷题解! 说的好! 怎么求有向图的欧拉路径呢? 如果有起点,从起点出发,然后不断dfs,对每个点记录其出边已经到了哪一条,然后当一个点的出边都遍历完的时候就把这条边加入栈中。 这样就找到了一条合法的欧拉路径。 可以使用当前弧优化,时间优化到O(n+m)。 这个题因为要求字典 阅读全文
posted @ 2021-11-19 11:35 尹昱钦 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 若干平衡树,每次操作有两种,一是合并两个Splay,二是查询某一个点所在的平衡树里的第k小的点的编号。 首先用并查集维护某个点在哪个平衡树里,然后rt[i]记录编号为i的平衡树的根。 每次合并时启发式合并,直接把小的树的每个点暴力insert到大树里。 查询正常操作即可。 为了方便 阅读全文
posted @ 2021-11-18 17:12 尹昱钦 阅读(76) 评论(0) 推荐(0) 编辑