- 博客(68)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 日常笔记~
无聊的小笔记本会持续更新,有意思的小东西都会放在这里~其实就是一些很小又怕自己忘记的小知识,以及一些奇怪的东西✡二进制的三种码原码:就是二进制正常表示一个数,不足八位在前面补零补到八位反码:对原码取反补码:反码+1另外一说~:补码就是负数在计算机中的二进制表示方法。✧✡一些位运算等的预处理:像lowbit、log、平方等会用到多次的量,如果可以判断数据上界,则最好写成一个数组,预处理出所有可能用到的值。如果写成函数形式,那么每次需要使用这些值是都要调用一遍函数,或者用如x&
2021-09-16 17:02:27
176
1
原创 折半搜索-oier复健练习题目
折半搜索常用于复杂度O(n!)级的搜索问题,当我们发现很显然可以将问题划分为两部分分别搜索枚举,再合二为一求出最终答案时,我们可以选择使用折半搜索。
2023-10-21 16:34:02
746
1
原创 2022.3.24模拟赛总结
一个半月没模拟了,运营直接爆炸。复盘:拿到题先遍历一下,T1树上构造,肯定能切,先放一下。T2lcp+要求最大值最小,还是小数,大概就是O(nlogn)求sa+height数组,再打一个数据结构把lcp转化成RMQ问题即可。然后二分判定,一下子没想出二分判定的方式。T3:修改序列+求以某个字符串结尾的本质不同子序列数量。本质不同子序列可以线性dp求,那么这题就是dp优化。m比较小所以大概有什么奇怪的做法?肯定切不了了就先做这个。0~1.5h:凹T3的dp,很好做,大概先O(nq)dp能拿20pts
2022-03-24 21:14:23
363
原创 计算几何(三)多边形
写在前面本文基于fxj巨佬的计算几何全家桶,并基于原文进行了自己的一些整理了经验补充,阅读本文前请前往支持巨佬fxj。表示:用一个VVV数组顺时针或者逆时针存储多边形的所有顶点。调用函数时传入数组和顶点数。求多边形面积:取任意一个点OOO,多边形面积为:S=12∑i=1nOAi→×OA→i%n+1S=\frac{1}{2}\sum^{n}_{i=1} \overrightarrow{OA_i} \times\overrightarrow{OA}_{i\%n+1}S=21i=1∑nOAi
2022-01-17 14:16:23
774
原创 计算几何(二):线段与直线,点与线,线与线的关系
part1:线段与直线struct line{ V d,a,b; };inline line trans(double a,double b,double c,double d){ V dd(c-a,b-d),x(a,b),y(c,d); dd=dd/len(dd); return (line){dd,x,y};}inline line trans(const V &a,const V &b){ V dd(a-n); dd=dd/len(dd); retur
2022-01-17 11:11:33
1536
1
原创 树链剖分模板
part0:数组内容part1:dfs1功能:<1>标记每个点的深度dep[]<2>标记每个点的父亲fa[]<3>标记每个非叶子节点的子树大小(含它自己)<4>标记每个非叶子节点的重儿子编号son[]void dfs1(int now){ son[now]=-1; siz[now]=1; for(int i=head[now];~i;i=e[i].nxt) { int v=e[i].v; if(v!=fa[now])//或(!d
2022-01-17 09:21:57
113
原创 计算几何(一):点,向量
struct V{ double x,y; V():x(0),y(0){}; V(double a,double b):x(a),y(b){}; }inline void input(V &a){a.x=read();a.y=read();}void print(const V &a,int op=1){printf("%.10lf %.10lf",a.x,a.y);putchar(op?10:32);}//op=endl or spaceinline V opera
2022-01-17 09:14:57
1172
原创 NOIP2021游记
DAY-13 ~ -11:DL因为疫情停课在家了,感觉到没什么,刷了一天往届NOIP题。DAY -10:今天感觉都在讨论NOIP能不能考的问题,莫名地开始焦虑。颓了一天。DAY -9 ~ -4:模拟赛+往届NOIP+复习DAY-3:做完2004~2020的NOIP,才反应过来快要NOIP了。写的往届NOIP总结写到2013年就发现写不完了,索性就放弃了。DAY-2:复习树形dp和线段树相关DAY-1:做点水题。算是摸了半天。下午复习模板。DAY0:看了一天以前写过的博客+往届
2021-11-21 11:55:33
567
原创 [模板]有向图最小环 & 洛谷P2661 [NOIP2015 提高组] 信息传递
算法要素:并查集的奇妙应用思路:并查集求有向图最小环tips:这道题完全可以拓展成带边权的有向图最小环,原题相当于边权为1.Code#include<bits/stdc++.h>using namespace std;const int maxn=2e5+50;int fa[maxn],dis[maxn];int n,t[maxn];int minn=1e9+7;int Find(int x){ if(fa[x]!=x) { int last=fa[x]; f
2021-11-12 21:19:47
265
原创 2021-11-06模拟赛
Result:0+0+70+0=70复盘:0~20min:读题x4,T3是奇怪的期望,弃掉,剩下的开题顺序是1342(熟悉的开题顺序0~1h10min:硬推T1正解,在尝试了最短路+拓展,图上dfs+二分+拓展,并查集之后发现没有任何意义。1h10min~1h50min:写T4O(n3)O(n^3)O(n3)暴力,发现不能过之后,用vector对每一个左端点维护一个右端点的集合,离散化之后是跑不满的O(n3)O(n^3)O(n3)但是出题人的数据显然是让我跑满了1h50min~3h:猜测T3是区
2021-11-06 14:58:21
111
原创 P1040 [NOIP2003 提高组] 加分二叉树
算法要素:二叉树的中序&前序遍历+区间dp思路分析:二叉树中序遍历的顺序是:左->根->右因此对于原题目给出的区间(1,n)(1,n)(1,n),其根节点一定在(1,n)(1,n)(1,n)上。同时,二叉树具有合并的性质,即不断合并子节点可以得到最终的根节点,而区间dp也是通过不断地合并区间得到最终的答案dp[1][n]dp[1][n]dp[1][n]。就可以合并这一性质而言,二叉树或者其他树,与区间dp高度一致,因此就可以用区间dp解决。至于要求输出前序遍历,只要单开一
2021-11-04 23:08:46
151
原创 2021.11.4模拟赛
Result:90+10+0+20=120T1:期望100,实际90T2:期望0,实际10T3:期望0,实际0T4:期望100,实际20复盘:0~20min:读完题x4,发现T1和T4相对可做,T2、T3不可做,直接弃掉。20min~1h20min:发现T1有同余性质,把所有同余项合到一起,跑一次线性dp。每个点最多被处理一次,因此复杂度O(n)O(n)O(n)。1h20min~2h:狂写T42h~4h:各种debug,挂了Ans:T1:正解就是拆出同余项+在每个同余项之中dp,me
2021-11-04 14:25:06
90
原创 P1005 [NOIP2007 提高组] 矩阵取数游戏
算法要素:奇怪的区间dp+高精度int128暴打高精思路分析:很容易想到每行之间根本没有任何关系。因此问题转化为了:在长度为m的区间中从区间两端取数a[i]a[i]a[i],第k次得分为a[i]×xa[i]\times xa[i]×x。要求使每行最终总得分最大。最终答案为所有行的最大得分之和。具体实现:(1)这题的一大特点就是细节特别多。可设出dpdpdp式 dp[g][i][j]dp[g][i][j]dp[g][i][j] 表示在第g行中(i+1,j−1)(i+1,j-1)(i+1,j−1)
2021-11-03 15:17:36
1970
原创 P1070 [NOIP2009 普及组] 道路游戏
算法要素:暴力dp+超长题面的阅读理解思路分析:先找出几个细节:(1)每一个时刻都必须有机器人位于环上。(2)对于每个时刻iii,在iii制造的机器人一定会花111的单位时间收集位于第iii条边上的金币。(3)每次可以从任意位置开始重新选择机器人。然后可以选择dp[i]dp[i]dp[i]表示时刻iii的最大收益经验总结:(1)最开始发现这道题有环,习惯性地想到破环成链,然后可以发现破环成链的条件:环只有一层,且环是静态的。(2)dp有时需要尽量考虑dp[i]dp[i]dp[i]从dp[
2021-11-03 11:13:07
2464
原创 P2258 [NOIP2014 普及组] 子矩阵
算法要素:dp+dfs思路:暴力:枚举选取哪些行和哪些列,复杂度CnrCmcC_n^rC_m^cCnrCmc,显然不可能过。这时就有一个神奇的思路:dp的作用是将组合数级别的复杂度优化成n2n^2n2等较小的复杂度因此可以考虑枚举行的组合,每次dp得出当前行的组合下最小分值。复杂度Cnrm2C_n^rm^2Cnrm2#include<bits/stdc++.h>using namespace std;const int maxn=32;int f[maxn][maxn],
2021-11-03 08:34:20
177
原创 2021.11.1模拟赛
Result:20+60+0+0=80,rnk9复盘:0~30min:把所有题都读完,T2是明显的二分+n2n^2n2check30min~1.5h:写T2+debuf,做法时间复杂度很假,期望100pts但是因为subtask大概率60pts1.5h~2h:写T1暴力,错误略有些多,debug耗时较多,期望20pts2h~3h:写T4正解发现T4应该是逆序对性质的应用,不过做法假了,被样例hack了3h~4h:写T4n2n^2n2贪心暴力写挂了,最后两个点依然是什么都没干完。。正解:
2021-11-01 15:50:04
90
原创 P4095 [HEOI2013]Eden 的新背包问题 & 二进制拆分+正反01背包
奇怪的题,真的很怪,调了1h传送门:洛谷P4095 [HEOI2013]Eden 的新背包问题算法要素:二进制拆分+正反两次01背包(特殊01背包)最开始没什么思路,发现可以直接多重背包,水掉50分。打上一个二进制拆分,数据梯度太大,因此意义不大。考虑离线,O(1)回答询问,结果还掉到40了。。。正解:step1:二进制拆分step2:正反两次01背包,dp1[i][j]表示只选前i个,dp2[i][j]表示只选n~i个。step3:因为原先某一物品被二进制拆分成了多个物品,去掉该物品所在
2021-10-28 12:57:55
171
原创 次小生成树(严格次小)(模版)
这道题调了快2h,因为一个极其愚蠢的错误算法要素:kruskal+倍增LCA+同步求最大值次大值算法分析:基本思路:首先肯定要生成一个最小生成树,然后有两种枚举方式:<1>可以选择枚举生成树上每一条边<2>枚举每一条非树边为什么要枚举呢?显然是因为这个问题并没有明显的单调性,无法通过贪心或者二分来排除一些无用的情况。那么我们还要面临最后一个问题:次小生成树分为严格次小生成树和非严格次小生成树。这个问题稍后再讨论。具体实现先考虑如何枚举树上的每一条边:(1)最短路
2021-10-28 12:57:07
373
原创 CSP2021游记
一些废话[过于丢人的博客,不会考虑发到博客园上]-2021.10.23 12:30Mint好吧我承认我现在看开了,有勇气把这篇博客发出来了,也算是向前迈出了一小步。大概吧复盘:前10min:先把所有题都看了一遍,发现第一题较为简单,应该是贪心+二分(三分),正解复杂度必为nlogn。第二题是括号序列问题。没问题!我仔细地研究过!结果发现其实还添加了很多其他的限制条件,传统的栈处理不一定能成。第三题是序列处理问题,应该较为简单,最后一题为图论,估计暴力也好写。初步决定的策略是无论如何先写暴
2021-10-26 01:05:48
166
原创 10.15模拟赛总结
Result:0+60+60+100=220复盘:上来先把所有题都看一遍,发现最后一道题是道签到题做过,30min直接切掉。T4期望得分100。然后开始写第二题,正解是meet in middle的算法,最开始想到的是从1开始dfs,统计答案。仔细看一下数据范围+转换一下思路可以发现出题人认为d对于算法复杂度的影响很重要,因此可以用2^d生成所有情况,然后dfs验证答案是否具有正确性。其实我还想尝试打一个剪枝,结果答案错了,emmm于是就把剪枝删了。可以得出一个重要的思想:dfs不一定要用来
2021-10-15 19:21:25
115
原创 无向图的最小环问题
一道很有意思的题。算法要素:floyd+利用过程量核心思想:算法可以利用的部分不只有结果量,过程量也会起到一些意想不到的作用。洛谷题面传送门题目分析:一、先说Floyd的本质:用多了f[i][j]的定义,就会忘了其实它是压掉一维的结果。最初的定义是f[i][j][k],意为从i到j,只经过1~k之间的点,最短路是多少。因此转移式为:f[i][j][k]=min(f[i][j][k-1],f[i][k][k-1]+f[k][j][k-1])。很容易发现:每一次k只会从k-1转移而来,因此可
2021-10-14 17:23:02
137
原创 平衡树学习笔记(二)splay
平衡树的基本思想:普通的二叉搜索树会因为一些操作失去二叉搜索树的部分性质,而平衡树就是用一些额外的操作来保持二叉搜索树的性质。一、节点维护的信息:rt:根节点tot:节点个数fa[o]:父节点ch[o][0/1]:左右子节点的编号val[o]:节点权值cnt[o]:权值出现的次数sz[o]:子树大小二、基本操作:✧maintain(x):改变节点位置后,更新节点的sz[o]tips:通常情况下,只需要maintain(x)和maintain(fa[x]),因为splay树的操作中一般
2021-10-14 15:41:26
260
原创 平衡树学习笔记(一)二叉搜索树
✧<1>定义:(1)空树为一棵二叉搜索树(2)二叉搜索树左子树中所有点的权值均小于其根节点(3)二叉搜索树右子树中所有点的权值均大于其根节点(4)二叉搜索树的左右子树均为二叉搜索树✧<2>变量的前置定义:在接下来的代码块中,我们约定n为结点个数h为高度,val[x]为结点处存的数值,cnt[x]为结点x存的值所出现的次数,lc[x]和rc[x]分别为结点x的左子结点和右子结点。sum为二叉搜索树中节点的个数,siz[x]为x所在的子树的大小(包括x自身,siz[x]的大
2021-10-13 13:40:12
146
原创 YBTOJ 虫食算
好吧这题正解其实是高斯消元,但是dfs剪枝也能过。题目链接:洛谷P1072虫食算题目要素:dfs剪枝题目分析:很显然要枚举每一个字母代表的数是什么,注意一个字母可以代表0。然后考虑如何剪枝:直接判断每一种情况在当前是否可以判断它不成立,以达到剪枝的效果。我们考虑如何判断当前情况不成立:(1)肯定要从低位到高位判断,因为要考虑进位的问题。(2)因为在当前情况下,可能高位的字母被确定后,低位反而没有被确定,因此需要分进位是否被确定两种情况。还可以发现:第一位没有进位,因此需要特殊考虑。✧✧✧
2021-09-29 09:42:29
151
原创 YBTOJ 回文分段 哈希+贪心
算法要素:hash+贪心题目分析:题目要尽量分出更多的回文子串,因此把一个大的回文串分成多个回文串一定会使答案更优。因此从字符串的两端向中间查找回文串,同时尽量使每一个回文串尽量的少。当一个串不能被分成回文串时,作为单独的一个串加入答案。判断是否是回文串只需要判断串是否相等,这个过程用hash完成。tips1: ybt一般不卡自然溢出,反而经常卡1e9+7等其他常用模数。tips2:hash的原理与前缀和有相似之处,因此查询l~r的hash值时,要用*hash[r]-hash[l-1]pow
2021-09-26 13:45:21
123
原创 9.25模拟赛
复盘:保留字这东西是真的坑啊…T1(ybtoj写博客):签到题,m遍求nxt数组+kmp,1h直接切掉T2:维护并查集,其实可以用链表写,预计60,挂到30,写+debug用了2h此时估分:100+60=160T3:暴力不怎么会写,用了40minT4:暴力都写不出来,固输2,其实固输n*m/2-1是最好的选择end:tot=T1(0)+T2(30)+T3(0)+T4(0)=30。T1:用了一个保留字:next,本机用的是c++98编译,因此没有CE。评测机用的c++14,结果就CE了。
2021-09-25 13:29:25
98
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人