08 2019 档案
摘要:E. XOR Guessing 交互题。 因为这个数最多只有14位 0~13,所以我们可以先处理后面7位,然后再处理后面7位。 因为异或的性质,如果一个数和0异或,那么就等于本身。 所以我们第一次异或1~100 所以 后面从7到13位就都是0,所以结果的后面的7位就可以算出来。 然后同理可以把前面七
阅读全文
摘要:C. Helga Hufflepuff's Cup 这个题目我感觉挺难的,想了好久也写了很久,还是没有写出来。 dp[i][j][k] 代表以 i 为根的子树中共选择了 j 个特殊颜色,且当前节点 i 的状态为 k 的染色方案数。 k=0 ,代表当前节点 i 的颜色值小于 K 。 k=1,代表当前节
阅读全文
摘要:B. Marvolo Gaunt's Ring 这种一般只有三个的都可以处理前缀和后缀,再枚举中间这个值。 这个和之前写过的C. Four Segments 前缀后缀 处理方式很像。 #include <cstdio> #include <cstring> #include <cstdlib> #i
阅读全文
摘要:C. Four Segments 这种分成了三个节点一般都可以处理一下前缀处理一下后缀,或者处理一下前面的这个点,处理一下后面的这个点,然后再枚举中间这个点。 如果和中间这个点有关的,那么就可以换一下顺序,先枚举中间这个点,然后处理前面和后面的点。 这个是先枚举中间这个点,然后往前面贪心,往后面贪心
阅读全文
摘要:最短路 2 这个题目如果看清楚题意就很简单了,然而我还是出了一个非常讨厌的bug,找了半个多小时。 题目意思是给你一张图,求最短路,然后问你如果我要求出两点之间的最短路,那么最坏要枚举到第几个点。 比如说 1-4- 2 -5 我要求1到5的最短路,是不是要枚举到4 这个点才可以求出来。 然后我们就令
阅读全文
摘要:F - Qualification Rounds CodeForces - 868C 这个题目不会,上网查了一下,发现一个结论就是如果是可以的,那么两个肯定可以满足。 然后就用二进制来压一下这个状态就可以了。
阅读全文
摘要:B - Save the problem! CodeForces - 867B 这个题目还是很简单的,很明显是一个构造题,但是早训的时候脑子有点糊涂,想到了用1 2 来构造, 但是去算这个数的时候算错了。。。 用1 2 来构造 可以先枚举一些数来找找规律。 1 1 2 2 3 1 1 1 2 1 1
阅读全文
摘要:C - Ordering Pizza CodeForces - 867C C - Ordering Pizza 这个是最难的,一个贪心,很经典,但是我不会,早训结束看了题解才知道怎么贪心的。 这个是先假设每个人都可以吃到他喜欢的,就是先求出答案,然后按照b-a 排序,分别放入两个优先队列里面, 如果
阅读全文
摘要:C - 小明系列故事――捉迷藏 HDU - 4528 这个题目看了一下题解,感觉没有很难,应该是可以自己敲出来的,感觉自己好蠢。。。 这个是一个bfs 用bfs就很好写了,首先可以预处理出大明和二明能被发现的位置,标记一下。 然后跑bfs,注意这个bfs记录一下状态,记录一下是否看到了大明和二明。
阅读全文
摘要:B - Lawrence HDU - 2829 这个题目我觉得很难,难在这个dp方程不会写。 看了网上的题解,看了很久才理解这个dp转移方程 dp[i][j] 表示前面1~j 位并且以 j 结尾分成了 i 段的最小权值和 再定义一个数组 w[a,b] 表示 a到b 的权值和,注意这个不是前缀和,而是
阅读全文
摘要:B - Planning 这个题目我知道要贪心,也知道怎么贪,但是写不出来,感觉自己好菜。 这个题目要用优先队列维护。 题目大意是飞机延误,不同的飞机每次延误一分钟,它的代价不同,然后问,怎么安排才能使飞机延误的代价最小, 唯一的限制就是飞机只能往后延误,不能提前。 然后看了网上的题解,首先我们把
阅读全文
摘要:D - Pearls HDU - 1300 这个题目也是一个比较裸的斜率dp,依照之前可以推一下这个公式,这个很好推 这个注意题目已经按照价格升序排列序,所以还是前缀和还是单调的。 sum[i] 表示前面 i 种珍珠的花费的前缀和 dp[i]表示买前面 i 种珍珠需要的最少的花费 dp[i]=min
阅读全文
摘要:A - Print Article HDU - 3507 今天刚刚学习了一下斜率dp,感觉还ok,主要就是要推这个斜率,然后利用数据结构来优化。 推荐两篇写的比较好的博客,https://www.cnblogs.com/orzzz/p/7885971.html > 这个主要学习这个斜率dp的思路 h
阅读全文
摘要:Z - New Year Tree CodeForces - 620E 这个题目还没有写,先想想思路,我觉得这个题目应该可以用bitset, 首先这个肯定是用dfs序把这个树转化成线段树,也就是二叉树。 然后就是一个区间修改和区间查询。这个区间查询时查询这个区间的种类数。 这个之前写过几个题目也是查
阅读全文
摘要:T - zxa and leaf HDU - 5682 题目大意是:给你一颗树,这棵树有些节点已经设置了它的美丽值,然后剩下一些节点需要我们设置美丽值。 一条边的丑陋程度等于被定义为由这个边缘连接的两个节点之间的美丽水平的绝对差异 一棵树的丑陋程度则是边的丑陋程度的最大值。 这个题目应该是二分这个丑
阅读全文
摘要:L - A Heap of Heaps CodeForces - 538F 这个是一个还比较裸的静态主席树。 这个题目的意思是把这个数组变成k叉树,然后问构成的树的子树小于等于它的父节点的对数有多少。 因为这个k是从1~n-1 所以直接暴力肯定是不对的,所以可以用主席树来查询区间第k大。 查询的次数
阅读全文
摘要:H - Buy Tickets POJ - 2828 这个题目还是比较简单的,其实有思路,不过中途又断了,最后写了一发别的想法的T了。 然后脑子就有点糊涂,不应该啊,这个题目应该会写才对,这个和之前的一个题目很像 G - Queue HDU - 5493 线段树+二分 这个题目也是找位置,但是这个题
阅读全文
摘要:B. Math Show 这个题目直接暴力,还是有点难想,我没有想出来,有点思维。 C. Four Segments 这个题目我觉得还是有点难,这个题目求 res= sum[1,x-1] - sum[x,y-1] + sum[y,z-1] -sum[z, n] 的最大值 暴力枚举中间的y,然后两边贪
阅读全文
摘要:E - Help Jimmy POJ - 1661 这个题目本身不是很难,但是可以更加优化这个写法。 开始是n*n #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <algo
阅读全文
摘要:这个题目和之前写的一个线段树优化建图是一样的。 B - Legacy CodeForces - 787D 线段树优化建图+dij最短路 基本套路 之前这个题目可以相当于一个模板,直接套用就可以了。 不过注意为了提高效率,在区间与区间之间建边的时候建了两个虚点。 题目 G. 神圣的 F2 连接着我们
阅读全文
摘要:PUBG 1V3 这个题目我觉得好难写啊。 感觉自己码力不太行啊。 题目大意是,给你n个人,n个人组成m个队伍,每个队伍最多4个人。 然后给你每一个人的位置队伍信息还有攻击范围。 问当一个队伍剩下一个人的时候他最多可以杀多少个人。 这个题目是有扫描线的思想。 首先我们用一个结构体来存更新点的信息,然
阅读全文
摘要:C. Ilya And The Tree 写法还是比较容易想到,但是这么暴力的写法不是那么的敢写。 就直接枚举了每一个点上面的点的所有的情况,对于这个点不放进去特判一下,然后排序去重提高效率。 注意dp[v]一开始存的是从根节点到这个节点都选的情况,这样才好往后转移。 #include <iostr
阅读全文
摘要:学习博客推荐——线段树+扫描线(有关扫描线的理解) 我觉得要注意的几点 1 我的模板线段树的叶子节点存的都是 x[L]~x[L+1] 2 如果没有必要这个lazy 标志是可以不下传的 也就省了一个push_down 3 注意push_up 写法有点不一样,不过是可以改成一样的。 简单裸题*2 L -
阅读全文
摘要:D. Misha, Grisha and Underground 这个题目算一个树链剖分的裸题,但是这个时间复杂度注意优化。 这个题目可以选择树剖+线段树,时间复杂度有点高,比较这个本身就有n*logn*logn 但是就是lca+一点点思维就完全不卡时间。
阅读全文
摘要:C. Jury Marks 这个题目虽然是只有1600,但是还是挺思维的。 有点难想。 应该可以比较快的推出的是这个肯定和前缀和有关, x x+a1 x+a1+a2 x+a1+a2+a3... x+sum=b 所以我们可以通过b来枚举每一个x,如果这个x可以满足找到m个b,那就说明这个x是合理的。
阅读全文
摘要:E - Petya and Exam CodeForces - 832B 这个题目其实可以不用字典树写,但是因为之前写过poj的一个题目,意思和这个差不多,所以就用字典树写了一遍。 代码还是很好理解的,主要就是哪个findx函数,这个要好好理解。 如果碰到*或着?就要重新标记一下,其他都是一样的,对
阅读全文
摘要:Course Selection System ZOJ - 3956 这个题目居然是一个01背包,我觉得好难想啊,根本就没有想到。 这个题目把题目给的转化为 ans = a*a-a*b-b*b 这个可以看成 当b不变的时候 a 越大越好。 这个就可以用01背包来解决
阅读全文
摘要:G - Queue HDU - 5493 题目大意:给你n个人的身高和这个人前面或者后面有多少个比他高的人,让你还原这个序列,按字典序输出。 题解: 首先按高度排序。 设每个人在其前面有k个人,设比这个人高有x个人,所以k=min(k,x-k),求出每一个人在他前面比他高的人的数量。 然后用线段树来
阅读全文
摘要:C. Okabe and Boxes 这个题目是一个有点思维的模拟,当时没有想到, 思维就是这个栈的排序这里,因为每次直接排序肯定会t的,所以不可以这么写,那怎么表示排序呢? 就是直接把栈清空,如果栈顶就是我们需要的这个值,那就把这个值直接pop, 但是如果不是呢,就可以直接清空这个栈表示排序,如果
阅读全文
摘要:D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的。 直接说思路吧,说不清楚就看代码吧。 这个题目转移方程还是很好写的, dp[i][j]表示前面 i 个蛋糕 分成了 j 个数字的最大价值。 dp[i
阅读全文
摘要:B - Housewife Wind POJ - 2763 因为树剖+线段树只能解决点权问题,所以这种题目给了边权的一般要转化成点权。 知道这个以后这个题目就很简单了。 怎么转化呢,就把这个边权转化为两点之间深度更大的那个就可以了。 还要注意的是,这个公共祖先的点权要被减去。
阅读全文
摘要:这个题目是一个比较裸的树剖题,很好写。 http://acm.hdu.edu.cn/showproblem.php?pid=3966
阅读全文
摘要:A - Gaby And Addition Gym - 101466A 这个题目是一个字典树的变形,还是很难想到的。 因为这题目每一位都是独立的,不会进位,这个和01字典树求最大的异或和是不是很像。 知道这个了,就还比较好写了,不过要注意数组越界和超时问题。
阅读全文
摘要:这个题目居然可以用线段树写,好震惊,如果不是在线段树专题肯定想不到,但是就算在线段树的专题里面,我也不太会怎么写。 这个题目大意是,给你n m n代表n个点,m代表m条边,然后就是m行,每行两个数字,一个u一个v。 这个意思是u和v不想连,然后问你这个n个点形成了多少个联通块。 思路大概是这样,首先
阅读全文
摘要:zhrt的数据结构课 这个题目我觉得是一个有一点点思维的dfs+线段树 虽然说看起来可以用树链剖分写,但是这个题目时间卡了树剖 因为之前用树剖一直在写这个,所以一直想的是区间更新,想dfs+线段树,有点点没想明白 后来才知道可以把这个区间更新转化成单点更新,就是查一个结点的子树,如果子树有可以到根节
阅读全文
摘要:首先肯定是要先选好模板,并且把模板理解透彻 这个树链剖分的模板题 洛谷出的很好 https://www.luogu.org/problem/P3384 这个题目涉及了树链剖分的各种各样的操作 模板 然后就是一个简单的树链剖分的练习 树链剖分注意初始化和数组稍微要开大一点,不然容易re https:/
阅读全文
摘要:入门博客推荐 树链剖分说白了就是把一棵树拆成若干个不相交的链,然后用一些数据结构去维护这些链。 因为通常的数据结构处理区间信息很容易,但处理树上的信息就显得捉襟见肘了。于是我们想到把树拍成一个区间用线段树去维护信息。(和树的dfs序是类似的原理)。 树链剖分的几个常见应用: ①查询/修改树的子树的值
阅读全文
摘要:学习来源 首先要明确树状数组的本质就是带修改的前缀和,它每次用 lowbit 来很巧妙的寻找所属前缀的位置 在这些位置+k 然后还是用 lowbit 来查询这段和应该属于的树状数组的位置。 最简单的就是单点更新和区间查询,或者区间更新 然后就是区间更新和单点查询 这个就要用到差分的思想了 差分学习
阅读全文
摘要:之前学习了不带修改的主席树,今天想学习一下待修改的主席树。在这个之前重新回顾了一下主席树,对主席树又有了新的认识。 主席树其实就是记录了每一个历史版本的树,所以这个空间要开的很大,一般开40倍就够了。 首先要建一棵空树,然后对我们要求的数进行离散化,最后就是每次更新新建一颗树。 学习地址 每次新建树
阅读全文
摘要:B - Legacy CodeForces - 787D 这个题目开始看过去还是很简单的,就是一个最短路,但是这个最短路的建图没有那么简单,因为直接的普通建图边太多了,肯定会超时的,所以要用线段树来优化建图。 这个题目我一开始也没想到,不知道怎么用线段树优化,然后看了一下题解,豁然开朗。 首先建两棵
阅读全文
摘要:这个题目其实很简单,有很多的方法写,然后我还是不会写,感觉自己好菜, 我开始想的是dp,但是不知道怎么dp,看了网上题解,豁然开朗 dp[i] 表示前面i个数满足条件的数有多少,f[s]表示前缀和为s的最大的满足条件的数 if(a[i]==0) dp[i]=dp[i-1]+1; else dp[i]
阅读全文
摘要:A Simple Problem with Integers 这个题目首先要打表找规律,这个对2018取模最后都会进入一个循环节,这个循环节的打表要用到龟兔赛跑。 龟兔赛跑算法 floyed判环算法 这个算法我觉得还是很有意思的,可以学习一下。 不过这个题目这个算法打表还是有点难写的。 由这个算法可
阅读全文
摘要:今天写线段树写到要用到这个算法的题目,简单的学习一下。 https://blog.csdn.net/javaisnotgood/article/details/89243876 https://blog.csdn.net/wall_f/article/details/8780209 https://
阅读全文
摘要:C. Coffee Break 这个贪心之前好像写过,还是感觉挺难的,有点不会写。 这个题目大意是:给你一个数列n个元素,然后给你一天的时间,给你一个间隔时间d, 问你最少要用多少天可以把这个数列的所有元素放进去,注意元素之间必须相隔大于等于d,还有就是假设每一天之间的间隔大于d 解法: 借助队列来
阅读全文
摘要:B. Heaters 这个题目虽然只有1500的分数,但是我还是感觉挺思维的,我今天没有写出来,然后看了一下题解 很少做这种区间覆盖的题目,也不是很擅长,接下来讲讲我看完题解后的思路。 题目大意是:给你一个数列,这个数列的0代表这个地方没有加热器,1代表有,每一个加热器的范围是 [i-r+1,i+r
阅读全文
摘要:今天先写了01字典树,学习博客 这个01字典树还是很简单的,看看模板就会了 贴一下我的模板 然后就是今天写的两个简单的裸题 G - Xor Sum HDU - 4825 #include <cstring> #include <queue> #include <cstdlib> #include <
阅读全文
摘要:S - Making the Grade POJ - 3666 这个题目要求把一个给定的序列变成递增或者递减序列的最小代价。 这个是一个dp,对于这个dp的定义我觉得不是很好想,如果第一次碰到的话。 上网看了一下题解,dp[i][j]表示前面 i 位已经是有序的了,第 i+1 位变成第j大的最小代价
阅读全文
摘要:C. Journey 补今天早训 这个是一个dp,开始我以为是一个图论,然后就写了一个dij和网络流,然后mle了,不过我觉得如果空间开的足够的,应该也是可以过的。 然后看了题解说是一个dp,这个dp要bfs去转移,为了保证每条边只被转移一次,还要用拓扑排序, 说了这么多,感觉很复杂,其实不是,这个
阅读全文
摘要:Codeforces Round #577 (Div. 2) D. Treasure Hunting 这个一场div2 前面三题特别简单,这个D题的dp还是比较难的,不过题目告诉你了只能往上走,所以还是可以看出来这个是一个dp的。 然后对于每一段,肯定是从左到右或者从右到左这个是最优的,这里就是有一
阅读全文
摘要:这个题目一开始感觉还是有点难的,这个模数这么大,根本就不知道怎么写,然后去搜了题解,知道了怎么去求当x很大的时候x的平方对一个数取模怎么样不会爆掉。 然后还顺便发现了一个规律就是当一个数更新一定次数之后就不会变化了。 然后这个题目就很好写了,就是一个区间求和和一个区间修改。现在还不确定如果不加一个找
阅读全文
摘要:这个我其实也没有看太懂它的证明过程。 1.若某一个位置被翻转了n次,则其实际上被翻转了n%2次。 2.分析易知翻转的顺序并不影响最终结果。 3.现在我们着眼于第1个位置,可知若要将第1个位置进行翻转只有翻转它自己,因为没有其他位置的翻转会引起它的翻转。 由①可知若第1个位置为1则必须且进行翻转(并将
阅读全文
摘要:N - Subpalindromes URAL - 1989 这个是一个哈希+线段树,这个题目也不算特别难,但是呢,还比较有意思。 这个题目给你两个操作,一个是回答l~r 区间是不是回文,一个是对一个点进行单点修改。 这个用哈希还是比较好用的,首先就是把所有字符映射成一个数字,然后就相当于给你一串数
阅读全文