10 2021 档案
摘要:这三货是一套的,改改输入输出 注意在判断次小生成树时,要保证最后用到的边的总数为n-1,否则非法. 前两道wa了好久,一直放着,直到今天打开uva10462才意识到题目保证最小生成树存在但没保证次小生成树一定存在.. Poj 1679 #include <iostream> #include <ma
阅读全文
摘要:看完题的第一眼就在怀疑tag 能二分的事为什么要写线段树 普通二分没法支持动态插入 用c++自带的stl set<int>st; st.clear()清空 st.insert(x)插入 r返回第一个>=x的数.upper_bound()为第一个>x的数 l返回第一个<x的数,只要用r指向的位置-1即
阅读全文
摘要:每次染色子树,询问某个节点此时的颜色。 建树比较特殊,先dfs一遍用时间戳dfn给每个节点编号, 把该点的子树转化成它管辖的连续区间 照常染色即可 注意query的时候,问点q,传入参数应该是dfn(q),而非q。 -- #include <iostream> #include <math.h> #
阅读全文
摘要:扫描线的思想本质上是通过维护有效长度,切割矩形再进行累加。 如何实现维护有效长度? 假设从左往右扫描,扫到一个矩形的左边时,该矩形的面积开始累加,扫到矩形的右边时,该矩形不再做贡献。 -- 以下是废物李一水对该模板的浅薄理解,有错请及时cue我.. 为什么把pushup写到了update retur
阅读全文
摘要:又傻逼又毒瘤 我还卡了这么久 说明我也又傻逼又毒瘤 #注意每个case后面要有一行空格; #注意sum会爆int,所以无论是数组还是函数还是输出时,都要开longlong #为什么可以直接暴力修改?sqrt是个神奇操作,无论多大的数,在很有限的次数里都会开到1,总的修改次数不会很多 #判断该区间是否
阅读全文
摘要:也可以用st表做 但st表不支持动态更新 数据结构码得还是太少,本废物给您表演一个花式手抖 数据大注意scanf; #include <iostream> #include <math.h> #include <string.h> #include <vector> #include <map> #
阅读全文
摘要:被昨晚的自己误导一直以为跳过了只能通过回旋跳跃的方式一步一步卡过去.. 考虑跳过的步数,如果差值为偶数,可以在之前的某步先回跳 如果差值为奇数,凑出偶数即可,且一定凑得出来
阅读全文
摘要:刚开始一看这不01背包 一看数据nm炸了 特点是v只可能是1或者2 而2=1+1 建两个大根堆,每次拎q1的两个头出来和q2的一个头出来比较 一个很小的优化就是如果v为奇数,那么q1的最大肯定要先取 —— 最近状态很烂,补一个死活卡在21不知道re在哪里的代码 #include<bits/stdc+
阅读全文
摘要:#其他博客讲得很正规透透的了,我想提供一点通俗易懂的菜鸡视角 ac自动机的起源我猜是: 对于字符串串abcde 枚举到abcd发现e不匹配后,再回去从b开始匹配吗? 如果能知道bcd是哪个目标串的前缀就好了,我们就可以换成这个目标串继续配 失配指针就是用来找这个目标串的 字典树:存she,sher,
阅读全文
摘要:很经典的交换位置,用自己构造好的式子做排序关键字 军训的时候突然想到相邻交换的话就不用考虑对其他的影响了 那一直换直到不能再换就好了
阅读全文
摘要:Farmer John 的农场缺水了。 他决定将水引入到他的 nn 个牧场。他准备通过挖若干井,并在各块田中修筑水道来连通各块田地以供水。在第 ii 号田中挖一口井需要花费 W_iWi 元。连接 ii 号田与 jj 号田需要 P_{i,j}Pi,j(P_{j,i}=P_{i,j}Pj,i=Pi
阅读全文
摘要:--还当初只学了一年不到的oi的债 给定某些区间要求选出某些区间,并且两两不相交,问能选多少; 题解区一水的按结束端点排序,解释是只有这样会干扰到别人。 我的yy是维护最新选的,和枚举到的值对比, 只有两种情况,要么相交要么不相交 不相交直接更新了 相交的话挑那个结束时间早的,这样不会使答案变差(极
阅读全文
摘要:大意是给定n,m,v,n个点,在这n个点之间连m条双向边,使得去掉点v之后该图不连通; # yy了一个能联通的最小值,树,如果m<n-1则无解; then 最大值? 完全图,但是n-1个点的完全图,要抠出一个孤立的点只和v连接,确保v是割点 =(n-1)*(n-2)/2+1; # 先判无解再输出方案
阅读全文
摘要:题意是说先把所有的yx交换成xy后再移去xy; yy一下(或者多玩几个or观察样例 发现答案为abs(x-y) #include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; char s[maxn]; int main( )
阅读全文
摘要:问最大的区间异或和 看到n<=100开心n3了; 但有一个性质可以把降到n2 ai^ai+1^ai+2^ai+3^ai+4...aj ==s(i-1)^sj; 求一遍前缀和再枚举区间即可 关于异或有一些很神奇的性质,cf的某道c题就是以这个为基础开脑洞的。 即x^0=x; x^x=0; x^x^x=
阅读全文
摘要:要求最远的不能超过d; 又因为保证了递增 那我们固定一个点,找到数列里第一个刚好<=该点+d的位置 然后区间中任意挑两个数都是合法的; c(2,m)√ # 如何找到第一个刚好<=? 不手写二分的话用 ll r=upper_bound(a+1,a+n+1,tmp)-a; r--; 注意是upper,和
阅读全文
摘要:#第一以为是直接传送看贝西会不会无限循环那道题,直接洛谷搬过来交了一发,wa了 哦,不是,是时间旅行者JOHN. #建图+判负环 虫洞单向边,权值为负; 路径双向边,权值为正; #判负环的条件是入队次数>n 坑点: 听说poj的评测机菜到动用min不行要手写if; 还听说连三目运算都会被卡; 我的坑
阅读全文
摘要:网上一水的dp加各种优化。 我想起那道最大字段和,做法与其说是dp不如更像是贪心。 证明一下: 假设当前走到了ai,发现开始有了若干负数 要不要过去呢?先让子弹飞一会。 截止现在我们有三种选择,第一止步,第二带着现在的maxn走过去,第三跳过去从接下来一段正的开始重新计数。 这三种选择可以用以下两种
阅读全文
摘要:#可以选择步行也可以选择坐地铁,坐地铁快,求家到学校距离 #有点像做过的某题,不同岛间有航道,岛上有不同的上岸点,做法是分开内部处理好后再总的跑一遍最短路#考虑这样建图: 假如没有地铁,所有点之间只能步行,先建一波。 有地铁是对步行的优化,在地铁间再建一波。 把这些点扔进去一起跑最短路。 -- 待填
阅读全文
摘要:——一切都回来了,用csj的话。 这货上次在群里说一道spfa判负环的题改半天,改出来的那刻觉得一切都回来了。 hh,都想起来了吗,在机房被支配的恐惧和ac的快乐。 # 觉得这个n可以用弗洛伊德,但觉得弗洛伊德维护不了那么复杂的情况 # 写了一个dij—— 那么问题来了,dij的板子里有一个是vis
阅读全文
摘要:这题和kuangbin并查集专题的“how many answer are long”思想神似 但要离散化 # 离散化后,总数也变了,写程序时没有变过来,造成re,找了半小时 # unique的用法是(a+1,a+1+len)-(a+1),类似于sort; 如果不打二分的话,lowerbound应该
阅读全文
摘要:思路是记录相对于父节点的偏移量 分别维护x和y即可 #第一个坑在读入既有数字又有字符的时候,要写成: scanf("%d%d%d %c"),否则老锅。 #第二个坑是实现operation和查询的时候,处理p1和p2没写好,造成溢出了。 锅着,仍然re,待填ing。 #include <iostrea
阅读全文
摘要:思路如题。 但坑点是: #会出现0,0这样单组的数据,并且要求你输出yes 这个没有那位兄弟的提醒我是想不到的 #题目看似要求你判断是否为树,实际上除了flag==0以外,还得联通。 第一次wa在0,0,第二次wa在没有判断联通。第三次wa在处理第一次的wa时,用了一个continue,下面的ok就
阅读全文
摘要:第一眼见这题目还以为它说的是一个bug的一生。。 带权dsu。 比普通并查集多记录了额外的信息,比如这道相对于父亲节点的关系。 我们并不care它爸爸到底是男是女,或者它自己是男是女,我们只需要知道它们是不是同类。 用1表示异性,0表示同性,这是一个找同性恋的题。 公式可以用%的形式写,也可以像我这
阅读全文
摘要:题意中 x<=n<=1e5; #设想n非常大 那x就没啥用了,如果一个数a,理应和b换,但是a与b之间的距离小于x,我们可以借助一个和a,b的距离大于x的变量作为中介; #但是n再小一点,比如n==x,就一点也动不了了,除非本来就是合法的。 #那么在无穷大和x之间,有一个比较尴尬的地带 取n==2x
阅读全文
摘要:想做出这道题需要三个技能点: 1,对于一个数x,x<<1为x的2倍,且在二进制视角看来,就是末尾多了一个0 2,题目说的k倍,k可以取特殊值,比如1,2 3,样例可能在扯淡有了以上三点前置知识,就可以开始构造了。 找到 xxxxxx xxxxxx0 或者 0xxxxxxxxx xxxxxxxxx 即
阅读全文
摘要:因为只能修改一次 且每点的修改只能对左右产生影响 画出所有的折线情况 发现贡献只能是3 ,或者1 如果满足-3就-3,否则-1; 但一直wa,又找不着该逻辑的毛病,先放着发酵一会 #include<bits/stdc++.h> using namespace std; const int maxn=
阅读全文
摘要:通过模拟发现让第一停可以得到987654321 让第二停可以得到 989012345 让第三停可以得到 9876 有一点比字典序的意思,要最大肯定最高位最大,模拟到3发现2最优了。 #include<bits/stdc++.h> using namespace std; int main( ) {
阅读全文
摘要:谈谈心路历程: 模拟完样例后直觉挑出合法的最大和最小(不在一个包里) 让最小减去最大,然后如果最小所在的集合只有它自己的话,就可以开始疯狂堆了。 但样例2告诉我们可能最小所在的集合可能不只有自己,那么最小的小伙伴一定要被吃掉。 我们就要在剔除前面已经用过的两个数的情况下,再跑一次上述流程。 理论上是
阅读全文
摘要:第一次做到这种神奇的题目 想了一个很复杂的组合数思路,大概就是枚举抽出多少个再放回去能满足条件,照着模拟这样 可是情况太多种了,以至于我想要个正难则反,就是枚举不满足的情况,发现情况也很多种 况且组合数本来就不会打,给我整不会了。 solution:证明了对于一个数列,假如它自己会被count到,那
阅读全文
摘要:2的倍数只有log个 一个数要变成2的倍数除了在现有基础上,如果要加的话只能后面一股脑加 匹配的时候按着2的倍数一一去匹配,配不上就丢掉。(照题意) 也不知道wa在哪儿了,经典出思路but ac不了 20211005,过了,有个情况没考虑全,9没考虑。
阅读全文
摘要:大意是给定一个字符串,每次从中挑一个字母删除该序列中的所有该字母,直到s为空 把每次得到的答案连接起来就是样例啦。 问能否找到一个顺序使得上述情况成立。 找规律ing: 最后一个出现的肯定是最后一次删除的 删除的次数肯定是字母的个数 最后一个出现的次数除以字母个数肯定是它在原序列里的出现次数 同理倒
阅读全文