随笔分类 -  题解

上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页
摘要:CF传送门 洛谷传送门 解题思路 很容易发现,对于每一次移动,除了最后一位,每一个数对答案的变化的贡献只有两种情况: 若a[i]>=i,对答案的贡献是+1 若a[i]<i,对答案的贡献是-1 所以我们可以预处理出每个时刻从a[i]<i到a[i]>=i的数有多少个,然后动态维护cnt1和cnt2(分别 阅读全文
posted @ 2021-03-08 00:12 尹昱钦 阅读(55) 评论(0) 推荐(0)
摘要:CF传送门 洛谷传送门 解题思路 显然有一条性质:每次选择一定选择一整行和一整列。 考虑暴力做法: 把每个点的横坐标连向纵坐标,边权为1,跑一遍最小点覆盖,求出最少选择多少行数+列数使其覆盖所有的边。 由于点可能很多,但是矩形可能很少,所以我们考虑优化。 把所有横纵坐标分别扔到一个数组中,离散化处理 阅读全文
posted @ 2021-03-08 00:05 尹昱钦 阅读(135) 评论(0) 推荐(1)
摘要:CF传送门 洛谷传送门 解题思路 首先容易想到的是个最小割板子,注意点要分成入点和出点。 其次就是简单的dfs,很显然,答案是0或1或2。 第一遍如果没有路,答案就是0,并且把所有经过的点都标记成障碍。 第二遍再进行一次dfs,若没路,答案就是1,否则就是2。 AC代码 1 #include<cst 阅读全文
posted @ 2021-03-07 21:49 尹昱钦 阅读(87) 评论(0) 推荐(0)
摘要:CF传送门 洛谷传送门 解题思路 把城市拆成两个点——入点(1~n)和出点(n+1~2n),然后以下情况连边: 读入的边(入连向出),边的流量为max 超级源点向所有城市入点连边,流量为a[i] 所有城市入点向出点连边,流量为max 所有城市出点向汇点连边,流量为b[i] 跑一边最大流,若最大流结果 阅读全文
posted @ 2021-03-07 00:33 尹昱钦 阅读(120) 评论(0) 推荐(0)
摘要:传送门 解题思路 先遍历一遍树,求出size[u](节点u的所有相邻节点的点权和),和图中联合权值的最大值。 如何求最大值? 求出每个点相连的点的第一大和第二大点权,相乘后与ans取max。 再求和: 再遍历一遍树,对于每个点u,答案加上w[u]*(size[v]-w[u])。 AC代码 1 #in 阅读全文
posted @ 2021-02-22 11:50 尹昱钦 阅读(100) 评论(0) 推荐(0)
摘要:洛谷传送门 CF传送门 解题思路 先考虑没有限制负数的情况,很显然就是用一个栈,每次与栈顶能配对就配对。 当有限制负数时,会出现错误,如 1 1 3 3 -1 -1,此时我们不能让前两个1相配对。 这是进行以下两个改动: 因为要求是正数在负数前面,所以我们进行倒序枚举。 若当前数要求为负数,则直接入 阅读全文
posted @ 2021-02-22 10:01 尹昱钦 阅读(134) 评论(0) 推荐(0)
摘要:洛谷传送门 CF传送门 解题思路 先想O(n^2)暴力,第一层循环为序列a1的最终长度i,第二层循环为序列a3的最终长度j,那么操作次数为原序列a1给a2和a3的数字个数+a2给a1a3的个数+a3给a1a2的个数。 可以预处理出三个数组,cnt1[i]表示序列a1中1……i中有几个数字,cnt2[ 阅读全文
posted @ 2021-02-21 16:18 尹昱钦 阅读(172) 评论(0) 推荐(0)
摘要:洛谷传送门 CF传送门 解题思路 紫题?? 洛谷的题目颜色真的太准! 读完题,我们可以发现以下结论: 栈内元素清空后,剩下的元素从大到小放入答案序列尾部; 比栈顶元素小的元素在栈底则无解 所以思路即为:把给定的元素全部压入栈中,压入栈的过程中同时能弹出就弹出(要符合字典序,即从1开始),然后对剩下的 阅读全文
posted @ 2021-02-21 10:27 尹昱钦 阅读(98) 评论(0) 推荐(0)
摘要:传送门 解题思路 先读懂题目: 有一个等差数列(未排序),共有n个数字,需要你猜出公差和最小的数字。 你共有60次询问机会,每一次有两种选择: ?i,返回ai的值 > i,返回是否存在一个数严格大于i 最后给出答案。 思路? 首先用二分查找得到最大值,使用最多三十次左右询问次数(a<=10^9)。 阅读全文
posted @ 2021-02-20 21:00 尹昱钦 阅读(88) 评论(0) 推荐(0)
摘要:传送门 解题思路 看到题的第一眼,直觉告诉我要把所有的数乘在最大的数身上,但举了一个反例: 2 1 2 2 3 这样乘在2身上明显答案更优。 所以并不能确定应该乘在谁的身上,但是可以保证一定是把所有数都乘在一个数身上。 那么怎么优化O(n^2)的时间复杂度呢? 我们可以预处理一个数组存所有数字二进制 阅读全文
posted @ 2021-02-20 10:45 尹昱钦 阅读(109) 评论(0) 推荐(0)
摘要:传送门 解题思路 开21棵线段树,把数字拆成二进制存,然后对每一位进行操作。 注意+-*/和&^|等不能混用,都各自是闭环,两者毫无规律可言! 所以就开21棵线段树。 AC代码 1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 阅读全文
posted @ 2021-02-20 09:55 尹昱钦 阅读(152) 评论(0) 推荐(0)
摘要:传送门 莫队 莫队就是一个优雅的暴力。 莫队就是把询问分块+排序,第一关键字为左端点在第几块,第二关键字为区间右端点。 条件?问题离线,询问的是区间。 名字由来?一个国家队队长发明的= 解题思路 对于区间i...j,成功的概率为: 不必解释了(学过排列组合的都懂,像我一样没学过的也想不懂) 整理一下 阅读全文
posted @ 2021-02-16 00:23 尹昱钦 阅读(75) 评论(0) 推荐(0)
摘要:传送门 解题思路 一言一概之,动态求区间众数。 瞄一眼数据范围,大约n根号n——分块大法好! 先把读入的数据离散化,然后进行分块处理。 对于每一个询问,把它分成整块和零散快处理: 整块:预处理i到j块的众数,直接O(1)询问。 零散快:预处理从1到n每个数出现的位置,枚举零散快的数字,二分查找询问的 阅读全文
posted @ 2021-02-15 23:45 尹昱钦 阅读(90) 评论(0) 推荐(0)
摘要:传送门 分块大法好 分块 什么是分块 就是把一连串的东西分成几个部分,通常是分成√n个部分,每个部分√n个数字,然后每一块分开处理。(当然有别的情况) 有什么用 时间得到了优化,把n变成了sqrt(n)*log(sqrt(n))。这是一种优雅的暴力呢 主要思路? 每一块内按照权值排序。对于每一次操作 阅读全文
posted @ 2021-02-04 10:25 尹昱钦 阅读(95) 评论(0) 推荐(0)
摘要:传送门 启发式合并 通俗点讲,就是将两个数据合并时,小的合并到大的里,这样就可以节约时间。 解题思路 再看看这个题,就是个板子题。 在两个节点信息合并起来时,让颜色数少的节点合并到颜色点多的节点上,实际操作时则是都是儿子的信息合并到父亲上,但是若儿子信息多于父亲,则交换一下信息(swap可做到O(1 阅读全文
posted @ 2021-02-04 00:49 尹昱钦 阅读(124) 评论(0) 推荐(0)
摘要:传送门 解题思路 先用字典树存储所有的字符串,然后对每个字符串进行判断是否能成为符合要求的字符串: 对于这个字符串的每一位,如果这一位上有别的字符串与之不同,那么一定就把别的字符串这一位上对应的字符j向这个字符串这一位上对应的字符t连一条边,表示我们规定的字母表中j大于t。 然后判断有没有环出现即可 阅读全文
posted @ 2021-01-10 23:39 尹昱钦 阅读(166) 评论(0) 推荐(0)
摘要:传送门 解题思路 普通的trie貌似会MLE 但是我们可以偷偷数组少开个零,就A了 想知道为什么? 别问,问就是数据水。 其实正解map bitset等等…… 看来以后要学学bitset…… AC代码 1 #include<cstdio> 2 #include<iostream> 3 #includ 阅读全文
posted @ 2021-01-10 16:02 尹昱钦 阅读(126) 评论(0) 推荐(0)
摘要:传送门 解题思路 把每一个信息插入01字典树中,用vis[i]表示有多少个信息经过这个点,用vis2[i]表示有多少信息以i这个点结尾。 注意vis中不包含以其结尾的点。 然后对于每一条暗号,跑字典树,经过的点加上vis2[now],结束时加上vis[now],注意当因为匹配不到结束时不能加vis, 阅读全文
posted @ 2021-01-10 11:54 尹昱钦 阅读(124) 评论(0) 推荐(1)
摘要:传送门 解题思路 纯属为了想练trie树 其实map更简单 注意答案开longlong,数组开5*maxn AC代码 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<iomanip> 5 #include< 阅读全文
posted @ 2021-01-04 14:32 尹昱钦 阅读(105) 评论(0) 推荐(0)
摘要:传送门 以这个做模板还是很纠结的…… 解题思路 01字典树,就是一个二叉的字典树,把许多数字二进制拆分,然后扔进字典树里,就可以进行许多骚操作。 回到这个题,朴素算法为预处理出每个点到根节点的路径的异或和,然后枚举任意两个点,把两个节点到根节点的异或和异或起来即为答案。原因是lca到根节点之间的路径 阅读全文
posted @ 2020-12-22 00:32 尹昱钦 阅读(207) 评论(0) 推荐(0)

上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页