数论&DP
(再三考虑,把数论和DP放在前面,因为他们是在是太重要啦,而且我又不是很懂)
(还是因为我太菜了,这个就单独写博客吧——>为了写具体的分析,总结思路,绝不是因为想水博文)
精心整理后的数论知识博文:https://www.cnblogs.com/tyner/p/11360204.html
数论习题:
https://www.cnblogs.com/tyner/p/11853212.html
https://www.cnblogs.com/tyner/p/11853406.html
图论习题:https://www.cnblogs.com/tyner/p/11853338.html
dp习题:https://www.cnblogs.com/tyner/p/11853365.html
杂乱模板:https://www.cnblogs.com/tyner/p/11861454.html
模拟
信了樊某某的鬼,挑战这一神题简单题目
其实还挺好玩的....我觉得打for总错的同学做这题会简单一点...
我实在不想写解析了(估计也没人看)(代码也丑....
就写写自己的收获吧:(我基础差,勿喷
- string 类型的变量a,b ,在size相等的情况下可以直接用
< =>
等判大小,size不等时,根据size, 返回大小关系 - char 类变量虽然能够赋初值为'15'这个样的两位,但是在输入的时候还是只能读单个字符
刚刚做这题的时候真的想到了线段树。。。
正解: 模拟
如果你运气好的话,在计算样例时就能想到正确的思路,而我就比较差了。。
我们从左向右一次搭积木,不降序则不用更新答案,反之则需要加上他们的差值。。就这样
搜索
先考虑为一棵树的情况:
题目中说是要求字典序最小,而是树的话,那他们就一定是可以到达的,并且,我们必须是沿着根一直往下走到底的(自己想想就行了
这样,我们先以一为根,每次选取最小的儿子,边走边输出即可,简单的一个vcetor排序就能做到,于是60分到手(代码就不给了
接下来考虑基环树
如何删边呢?暴力删边!
其实基环树找环应该是用dfs找,用一个vis,一边跑一边赋1,回溯的时候变成0,如果在dfs时找到了一个vis等于1的点,就全部return,那么vis==1的点就在那个环上(大概吧...
而这题就可以暴力删边:用前向星枚举边,记录这条边的起点与终点,在dfs时若是碰到了一条边的两端点为这两个点,则continue不管,就这样
**直线交点数 **
分治与递归
贪心
数据结构
PA2015 Siano
自以为这是一个很不错的题目,有助于人理解线段树到底长啥样,是个什么原理。
首先,这题目和顺序没关系,我们可以从小到大排序a[], (自己还是没想到,这是老师说的emm...
然后看到了区间查询和修改,想到线段树(有点牵强
之后思考,维护啥,怎么pushdown。
显然,需要维护sum,set,于是有个难题:怎么模拟出草长高的操作? 思考后问同学, 可以维护一个add表示生长的天数(这题add是不能维护长的高度的,因为这样就不能pushdown了
在pushdown时,又遇到一个难题,怎么把add(天数)下传呢? 思考后,可以把a维护成一个前缀和,这样就能愉快的修改sum啦。(这里就是有助于我们理解线段树长啥样的。。
还有一个问题,就是怎么找要修改的边界呢? 因为a是有序的,所以右边界是n, 左边界呢? 还是因为a是有序的,所以线段树叶子节点也是有序的,二分查找即可,所以还要维护一个max
蓝书树状数组例题, 分析就不写了
我又犯了同样的错误233.....
树状数组在实现的时候一定要分清n,和你树状数组t的下标表示的含义,通常我们是用a的值来作为下标的,所以你add的时候判while(x <= MAX)
, MAX应为你的树状数组下标边界
在写线段树的时候也是这样,要注意你线段树的下标是啥,不要一上来就build(1, 1, n
), n 可能只表示数量,不是下标...
luoguP4097 [HEOI2013]Segment
听说这个叫李(Li)超(Chao)树(Tree), 也就是LCT(开玩笑的哈LCT不是这个
貌似挺重要的这个
就另写一篇博文吧(偷偷水一篇)