09 2018 档案

摘要:修建模板库 kmp就是利用已经匹配过的信息降低复杂度。 每次记录当前位置的最长的后缀等于前缀,然后如果发现当前节点不能匹配,就直接往前跳nxt进行匹配。 #include <iostream> #include <cstdio> #include <cstring> using namespace 阅读全文
posted @ 2018-09-30 20:15 SWHsz 阅读(116) 评论(0) 推荐(0) 编辑
摘要:LCT板子题。 和线段树2的操作方法一样,先乘后加就行了。洛谷评分虚高 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N=100005,mod=51061; int n, 阅读全文
posted @ 2018-09-30 17:16 SWHsz 阅读(121) 评论(0) 推荐(0) 编辑
摘要:大概意思是让求一个图的最小割的必须边和可行边 然后做法就是在残量网络上跑tarjan缩点。如果这个边没有满流,它就没有被割,肯定不是。 如果这个边的from和to不在一个点,就是可行边。如果from和S在一起,to和T在一起,就是必须边。 jcvb:(策神Orz 在残余网络上跑tarjan求出所有S 阅读全文
posted @ 2018-09-30 15:58 SWHsz 阅读(207) 评论(0) 推荐(0) 编辑
摘要:一下午搭进去了。。 最后发现少写了个pushup??? 有个关键的细节就是每次可合并两个区间的时候要判断一下ls的最左边的颜色和rs最右边的颜色一样不一样,一样就ans-- 然后就update和query的时候把链分成两节弄,否则很麻烦。 #include <iostream> #include < 阅读全文
posted @ 2018-09-27 23:59 SWHsz 阅读(190) 评论(0) 推荐(0) 编辑
摘要:分块题。 巨神Monster_Qi讲了以后发现这道题并不难,在此Orz 预处理两个数组,sum和ans。 离散化以后找前i块j出现了几次,和i到j块的众数是多少。这样的复杂度是n√n的,然后查询的时候边角块一个一个往进加,看能不能更新众数即可。 (不是我故意压行,是这个条件太多了。。。 #inclu 阅读全文
posted @ 2018-09-27 15:37 SWHsz 阅读(156) 评论(0) 推荐(0) 编辑
摘要:lct模板题。把所有的边按照a排个序,然后挨个加进去,然后以b为边权,求一个动态最小生成树。把每条边想成一个点,嵌在两个端点之间,然后每次加边的时候判一下新边的两个端点连不连通,连通的话就找两点路径上的权值最大的那个"边点"上的点权,把它和两端点cut了,然后再link这个"边点"和两个点。 #in 阅读全文
posted @ 2018-09-26 17:27 SWHsz 阅读(147) 评论(0) 推荐(0) 编辑
摘要:lct模板题。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N=10005; int fa[N],ch[N][2]; bool rev[N]; bool ck(int 阅读全文
posted @ 2018-09-25 23:50 SWHsz 阅读(137) 评论(0) 推荐(0) 编辑
摘要:k叉哈夫曼树。 需要保证权值尽量小的前提下深度最小。 我们可以把k个节点合并成一个节点,最后合成一个。 所以如果n-1不是k-1的倍数,就补起来。最后就是先取k个最小的,用一个假的节点连起来,然后把这k个东西当成一个新的节点,节点的权值是k个点的权值和。 #include <iostream> #i 阅读全文
posted @ 2018-09-25 15:39 SWHsz 阅读(301) 评论(0) 推荐(0) 编辑
摘要:陈年老题。。。 我就$%^&。。。 码了4k多。。。 主要就是用splay,然后处理区间上的东西 区间反转就和模板一样,但是要记得反转leftmax和rightmax 区间赋值就把那个区间提取出来,然后给子树根打个same标记,表示下面的全一样。 区间求最大子段和就和线段树的套路一样。 区间插入就先 阅读全文
posted @ 2018-09-25 00:33 SWHsz 阅读(149) 评论(0) 推荐(0) 编辑
摘要:splay区间反转练手题 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int N=100005; int n,fa[N],ch[N][2],val[N],siz[N],to 阅读全文
posted @ 2018-09-24 18:38 SWHsz 阅读(102) 评论(0) 推荐(0) 编辑
摘要:平衡树模板题,set也能做。求个前驱后继,按照题目上说的做就行了。 #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <ctime> using namespace std; co 阅读全文
posted @ 2018-09-21 21:38 SWHsz 阅读(146) 评论(0) 推荐(0) 编辑
摘要:WA的一声哭出来了。。。 显然是二分时间,显然是越靠近首都,军队的作用越大。 有几个细节 第一是军队向上跳的时候用倍增。 第二是如果这个军队有能力跳到根节点,记录一下它能继续走的路,然后用它去搞别的子树。 判断是否可行的时候把不能被覆盖的子树记下来,用之前记录下来跳过首都的去尝试能不能覆盖到该子树的 阅读全文
posted @ 2018-09-21 16:17 SWHsz 阅读(186) 评论(0) 推荐(0) 编辑
摘要:树剖板子题。 但是我太弱了。 没有看见值域是[-30000,30000],然后把mx的最小值设的-1。。。问问问 改了就A了。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const in 阅读全文
posted @ 2018-09-20 20:13 SWHsz 阅读(129) 评论(0) 推荐(0) 编辑
摘要:开开心心地写一道差分约束的题,但是不开心地发现只能拿90分??? Orz了一下dalao的题解,说有一个玄学的东西是最后加边的时候如果正的加就会T一个,反的就A了。 但是本弱反的加T了一个不同的,问问问??? 然后加了个剪枝,加边的时候如果发现有要自己严格大于自己的熊孩子,就输出-1就行了,然后就A 阅读全文
posted @ 2018-09-20 17:12 SWHsz 阅读(145) 评论(0) 推荐(0) 编辑
摘要:本弱鸡已经触发的错误姿势: freoprn("railway.in","r",stdin); freopen("railway.cpp","r",stdin); freopen("railway.out","W",stdout); freopen("railway.in","r",stdout); 阅读全文
posted @ 2018-09-19 20:48 SWHsz 阅读(835) 评论(0) 推荐(1) 编辑
摘要:当遇到需要将主存单元加进cache的时候,就看cache里是否满了,满了的话,就删除离最靠后的那一个,这样一定最优。但是网上博客的代码太长了。。。其实只需要判断一下当前的优先队列的top是否仍在cache中即可。 (重题:[POI2005]SAM-Toy Cars,AC数+=2 #include < 阅读全文
posted @ 2018-09-19 15:26 SWHsz 阅读(387) 评论(0) 推荐(0) 编辑
摘要:比换教室不知道低到哪里去了。 就二分一下第一个不满足的人,然后维护一个差分数组,diff[s[i]]+=d[i],diff[t[i]+1]-=d[i],然后把diff加起来,判断一下是否rest<现在的即可。 时间复杂度nlogn,就水过了。。。 #include <iostream> #inclu 阅读全文
posted @ 2018-09-18 17:30 SWHsz 阅读(145) 评论(0) 推荐(0) 编辑
摘要:大意:求一个序列有几个子序列的和小于给定值,里面的数有正有负,序列长度≤200000。 列个式子,其实求的是sum[r]-sum[l-1]<T sum[r]-T<sum[l-1] 所以我们可以枚举r,然后用树状数组找小于sum[r]-T的数的个数。记得要在树状数组里先加一个0,表示L取1,即从头开始 阅读全文
posted @ 2018-09-18 16:20 SWHsz 阅读(442) 评论(0) 推荐(0) 编辑
摘要:题面:Please contact with lydsy2012@163.com! 给定一个长度为n的数列a1,a2,⋯,an,每次可以选择一个区间[l,r]使这个区间内的数都加1或者都减1。 请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。 阅读全文
posted @ 2018-09-18 15:14 SWHsz 阅读(188) 评论(0) 推荐(0) 编辑
摘要:最近做的最简单的一道模拟题Orz 终于把noip2017的都搞完了。 这道理有几个需要注意的小细节: 1.注意 F i n n的情况,相当与常数。 2.在不循环的部分也要记得判断是否重复变量 3.两个常数的时候记得比大小 其他也就没啥了。 考noip2017的时候栈是什么都不知道,只知道ZZ模拟,也 阅读全文
posted @ 2018-09-17 21:35 SWHsz 阅读(210) 评论(0) 推荐(0) 编辑
摘要:???签到题??? 用BSGS做,但是我没有看见m一定是素数,打了个ExBSGS...... 大概意思可以把式子转化成10n≡9*K+1 mod m 然后就是BSGS的板子了 然后因为K,M巨达1011,因此需要用龟速乘。 #include <iostream> #include <cstdio> 阅读全文
posted @ 2018-09-17 16:04 SWHsz 阅读(145) 评论(0) 推荐(0) 编辑
摘要:搜索水题。因为只有8个数,排列一共有40320种,直接bfs,判重就行了。 但是判重的时候直接用8进制表示的话要88的bool数组。这种操作太low了,于是我们可以用康托展开,降成8!。 康托展开其实就是一个简单的公式,很好意会。。。。 #include <iostream> #include <c 阅读全文
posted @ 2018-09-16 21:17 SWHsz 阅读(147) 评论(0) 推荐(0) 编辑
摘要:题面:Please contact lydsy2012@163.com! 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 由裴蜀定理, 设a1,a2,a3......an为n个整数,d是它们的最大公约数,那么存在整数x1..... 阅读全文
posted @ 2018-09-14 17:35 SWHsz 阅读(123) 评论(0) 推荐(0) 编辑
摘要:要是这个图的权是1的话就和Cow Relay 一样了。 因为n非常的小,我们把它扩大9倍,每个节点拆成九个,代表距离为1,2,3,4,5,6,7,8,9。 然后连边的时候就连i+len->j就行了。(好想捏radish) 1 #include <iostream> 2 #include <cstdi 阅读全文
posted @ 2018-09-14 17:27 SWHsz 阅读(213) 评论(0) 推荐(0) 编辑
摘要:毫无思路,Orz了一下大佬的思路%%%。 大概就是因为k比n小的多,我们知道约瑟夫环有个公式是fn=(fn-1+k) mod n 可以改一下,改成fn+p=(fn+pk) mod (n+p) 但是这样的话就不对了,因为有mod,模数是改变的。 pk肯定大于p。然后我们可以让这个模数等价,就是mod 阅读全文
posted @ 2018-09-13 21:06 SWHsz 阅读(187) 评论(0) 推荐(0) 编辑
摘要:喜闻乐见的大水题。 先离散化,求一下正的最长上升子序列,再求一下反的最长下降子序列。然后看这两个加起来等不等于|lis|+1,然后如果能做某个位置的只出现一次,它就是不可替代的。(看代码吧 cpp include include include include include using names 阅读全文
posted @ 2018-09-13 19:30 SWHsz 阅读(128) 评论(0) 推荐(0) 编辑
摘要:搜索水题 但是我还是wa了好几次,把求不能收到水的看成能收到水的了。。。。 大概解法就是先bfs出来所有靠湖的城能波及到的靠沙漠的,然后判断一下行不行,行的话就dp cpp include include include include include using namespace std; co 阅读全文
posted @ 2018-09-13 16:24 SWHsz 阅读(133) 评论(0) 推荐(0) 编辑
摘要:结论:一个图的生成树个数等于它的度数矩阵减邻接矩阵得到的矩阵(基尔霍夫矩阵)的任意一个n 1阶主子式的行列式的绝对值 证明:不会 求法:高斯消元 例题:[HEOI2013]小Z的房间 cpp include include include define int long long using nam 阅读全文
posted @ 2018-09-12 20:31 SWHsz 阅读(246) 评论(0) 推荐(0) 编辑
摘要:裸杜教筛板子。 cpp include include include using namespace std; typedef long long ll; const int N=7000000; mapph,mu; int prime[N 3],tot;short miu[N]; bool vi 阅读全文
posted @ 2018-09-12 17:15 SWHsz 阅读(213) 评论(0) 推荐(0) 编辑
摘要:这道题让求的是令 $ \sum _{i=1} ^{i设有两组数a1,a2,……an和b1,b2,……bn,满足a1≤a2≤……≤an,b1≤b2≤……≤bn,c1,c2,……cn是b1,b2,……bn的乱序排列,则有a1bn+a2bn 1+……+anb1≤a1c1+a2c2+……+ancn≤a1b1 阅读全文
posted @ 2018-09-11 20:41 SWHsz 阅读(99) 评论(0) 推荐(0) 编辑
摘要:左偏樹的題。 把每個節點上有的騎士按照攻擊力的大小建一個小根堆。dfs的時候把兒子們的都合並過來,看看update完了的值是否小於防禦值。小於的話就pop,然後ans[x]++。記得開long long cpp include include include using namespace std; 阅读全文
posted @ 2018-09-11 20:10 SWHsz 阅读(110) 评论(0) 推荐(0) 编辑
摘要:很久很久以前,有一只神犇叫Monster_Qi; 很久很久之后,有一只蒟蒻叫SWHsz; 1 include include using namespace std; mapmp; long long n; const int N = 10000005,NI2=500000004,NI6=16666 阅读全文
posted @ 2018-09-08 11:36 SWHsz 阅读(298) 评论(2) 推荐(1) 编辑
摘要:杜教筛模板题。 求欧拉函数和莫比乌斯函数的前缀和。 鼻炎犯了,证明改天写。。。。 (大佬们看看有没有错啊。。。为啥跑的这么慢。。。) cpp include include include using namespace std; typedef long long ll; const int N= 阅读全文
posted @ 2018-09-07 23:39 SWHsz 阅读(109) 评论(0) 推荐(0) 编辑
摘要:看起来一脸高精+不可做的样子。。。但实际上是非常可做的。 高中数学必修三上面有一个算法是秦九韶算法。用这个算法做就行了。 但是那个高精度让人看的崩溃。但是我们的需求只有求左边这个式子答案是不是0,所以可以多膜几个不太大的数,为保证正确性,%了5个。时间复杂度是2w多的一个数 n+m。可以过 但是bz 阅读全文
posted @ 2018-09-07 20:12 SWHsz 阅读(163) 评论(0) 推荐(0) 编辑
摘要:大水题。竟然还WA了几次。。。 打个杨辉三角的表,然后求一个ans 的前缀和就行了。 需要注意的是如果b a了,b a的部分就没有意义了。就直接把b赋值成a就行了。 就这个WA了两次、。。 阅读全文
posted @ 2018-09-06 18:52 SWHsz 阅读(95) 评论(0) 推荐(0) 编辑
摘要:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。 基本莫比乌斯反演套路。 原式等价于 $\sum _{i=1} ^{i include include using namespace std; con 阅读全文
posted @ 2018-09-06 18:16 SWHsz 阅读(116) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示