摘要: 首先,本博客只供娱乐,请不要用于大型考试中.如果被告了也不要怪我. 考虑评测的原理:10组或20组或更多的数据放在data文件夹里,lemon每次用一个.in文件读入到你的程序里,你的程序会跑出来答案到.out里,lemon再与data里的.out文件进行比对. 而这个可能称得上算法的东西主要是通过 阅读全文
posted @ 2019-02-17 08:14 zzuqy 阅读(3103) 评论(0) 推荐(2) 编辑
摘要: splay是如何减少时间复杂度呢?让我先研读一下代码QAQ每次访问某个节点时都把它旋转到根节点. 以下转自https://blog.csdn.net/qq_31640513/article/details/76944892 共有三种情况. 那不如直接上例题?(越来越懒) 区间旋转怎么做啊?? 我会s 阅读全文
posted @ 2019-02-11 21:01 zzuqy 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 来说一下AC自动机. 大概就是给定一堆单词和一个很长的字符串,求字符串内这些单词出现的次数.如果只有两个字符串进行匹配可以写KMP,如果很多呢?我会字典树+KMP. 来复习KMP的核心思想:在A串中求B是否出现过,我们利用已经匹配好的B的后缀,当失配时尽可能的让指针在B上少向前跳.为此我们做出一个n 阅读全文
posted @ 2019-02-10 11:18 zzuqy 阅读(187) 评论(1) 推荐(0) 编辑
摘要: 先说冬令营. 听说冬令营是要去旅游的,也就非常的放松了,带了充电宝和手机就坐上车了,然而手机的充电口坏了,连着充电宝时断时续冲了一路看了一路小说还是百分之十几的电.第一个晚上和汤神住了一个旅馆.(汤神好帅啊还很幽默嘿嘿嘿) 第二天去报道,玩了一上午和一下午. 冬令营完全是颓废吧,完全没学到啥东西,好 阅读全文
posted @ 2019-02-09 17:31 zzuqy 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 录制自己的声音,好像没啥用,比如我可以录制自己正在看的电视的声音发出去.比如可以和小伙伴们连麦的时候放pop. 具体如何实现呢?只需要打开一个东西即可. 打开控制面板,你可以找到"声音",打开它,翻到"录制"的那一页.当然有可能什么也没有, 或者只有一个麦克风,这个时候右键空白的地方,点选"显示已禁 阅读全文
posted @ 2019-02-09 17:19 zzuqy 阅读(312) 评论(0) 推荐(0) 编辑
摘要: (转自澜神PPT) 普通的BST会卡,主要是由于仰仗于随机数据,如果"用心"构造数据就会被卡掉.考虑如何不被卡掉呢?我们可以"随机构建二叉树.算法导论第三版第169页-第171页有关于"一课有n个不同关键字的随机构建二叉搜索树的期望高度为lg(n)"的具体证明,有兴趣的可以看一看..所以对于离线的题 阅读全文
posted @ 2019-01-18 08:53 zzuqy 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 万事开头难,只要开始做就会比不做会的多. 爆零真的不开心. BST,Binary Search Tree,二叉搜索树.它可以做一个类似字典树,支持插入某个键值,询问某个键值的权值,删去某个键值.也可以做一个类似于优先队列的东西,查询区间最大值,区间最小值,一个键值v的前驱(小于v的最大的键值)后继( 阅读全文
posted @ 2019-01-17 17:18 zzuqy 阅读(165) 评论(1) 推荐(0) 编辑
摘要: 先来渲染气氛. 我真的不知道怎么记忆化搜索,这里讲一下如何用几个循环A掉. 数对称的正方形是吧,我会n^5枚举!枚举顶点,枚举正方形长度,枚举其中的点判断是否合法.30分到手.100分需要n^3的算法. 以下先考虑正方形长度为奇数的时候如何写. 考虑n^5如何向n^3转化?认真思考发现枚举中间的点好 阅读全文
posted @ 2019-01-16 13:16 zzuqy 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 这题其实不难啊,为啥没人写. 理解完题意,首先预处理应该都会.然后考虑如何统计答案.直接想到一个暴力的方法:O(n^2)枚举左右端点,O(k)判断是否各个位置上的数都相同. 然后考虑如何把一个n改成一个log(n)?k比较小,可以往这边考虑 先考虑下面两个例子.这里每一位表示1,i时出现1的总数. 阅读全文
posted @ 2019-01-14 12:27 zzuqy 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 大意是已知权值,求分成若干组每组和大于等于0的方案数. 模拟一下,显然有一个n^3的转移. 然后发现显然有一个n可以利用前缀和省掉,40分到手. 然后考虑这个过程:ans[i]=当前sum小于等于sum[i]的权值ans加一块.这个过程是可以上树状数组的.sum[]可能范围过大,只需要三行离散化. 阅读全文
posted @ 2019-01-14 07:53 zzuqy 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 虽然写着AC自动机,但是我寻思着m*maxlen也能写啊为啥写的人这么少? 对于所有的单词可以建立一个字典树,小小的改动就是把单词的结尾记录sum++,然后枚举开头能跳的话就向下跳,如果跳到一个地方发现sum!=0显然可以ans+=sum,sum=0; <=50*1000000AC,甚至比康神AC自 阅读全文
posted @ 2019-01-11 17:00 zzuqy 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 弄了半上午的无向图联通性,高高兴兴的写这个题的时候想起来它是有向图联通性,于是又弄了半上午有向图联通性.中午开始做. 仔细看题,它究竟想问什么?想考什么? 作为一个无向图,可以直接求强连通分量+缩点,因为强连通分量内部互相可达,不如换成一个点.做第一问的时候,对于这样的新图,可以直接枚举点得到入度为 阅读全文
posted @ 2019-01-09 12:05 zzuqy 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 对于一个有向图,若任意两个节点x,y都有x到y的路径和y到x的路径,称它为强联通图.一个有向图的极大强联通子图被称为强联通分量.这里的极大与无向图里的极大双联通 子图类似,对于一个极大强联通子图A,不存在子图B也是强联通子图且A⊆B. 求有向图的强连通分量又要运用到tarjan算法.先对于有向图中的 阅读全文
posted @ 2019-01-09 09:08 zzuqy 阅读(387) 评论(0) 推荐(0) 编辑
摘要: noip集训前天天爆零,为了勉励自己,决定如果再爆零我就开始学tarjan,然后第二天果然没爆零. 总之tarjan对我来说是很难的. 考虑割点割边:割点是一个点,删去后图会分裂成两个以上不相连的子图.割边同理,只删去这个边后图会分裂乘两个以上不相连的子图.这个玩意非常重要,所以经常要用到.如何在线 阅读全文
posted @ 2019-01-08 14:33 zzuqy 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 在学二分图的时候遇见了,不如来写一下. 现在再看就很能想到二分图了,但是这里用一下并查集.先把边从大到小排序,对于每个边上的两个点都安排在另一个点+n里,直到两个端点在同一个集合里就证明不能再合并了,输出当前边. 对于样例 这是进行三次后的图的样子,下一个边2 3 3512就不能再进行匹配了,输出3 阅读全文
posted @ 2019-01-05 07:16 zzuqy 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 二分图就是一个节点数>=2的图如果能被分成左右非空的两部分,且同一集合内部的边不相连,那么就是一个二分图.一张图是二分图,当且仅当图中不存在点数为奇数的环.因为链都好说,而环内相邻的点一定都不在同一个部分,但是点数为奇数时就会有点不能找到自己的位置... 因为两个部分是等价的,对于一个图直接从一个节 阅读全文
posted @ 2019-01-05 06:39 zzuqy 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 大概就是一个基于克鲁斯卡尔算法的一个算法? 先考虑一个模板题:不带修改的离线. 给出一个图,离线求任意两点间最大边的最小值.之前写过题解的. 点我跳转 大概就是先做出来一个最小生成树(森林),然后对它进行lca.我只树上倍增lca所以恰好解决了不修改的离线. 但是只止步于此是不行的,最小生成树的lc 阅读全文
posted @ 2019-01-04 08:29 zzuqy 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 先不管那个+d,我们来考虑正常的可持久化字典树.总的思想就是贪心:用一个主席树模仿字典树,我发现当线段树总区间是2^n-1时每个小区间内部的01分布就与深度有关.比如左半边这一位都是0右边都是1这个样子.这样就可以O(1)地判断某个区间内有没有数,因为是一整个的区间,又因为向下到达根节点需要logn 阅读全文
posted @ 2019-01-02 20:51 zzuqy 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 先吹一波程序跑的速度 然后来看题: 给出两个4*4的棋盘状态,问你最少移动多少步使得一个状态转移到另一个状态.只能向上下左右移动,移动的位置不能有其他棋子. 刚开始认为很贪心,但是显然不是.然后考虑才16个棋子不如把所有状态都列一下2^16才65236个状态更何况达不到这么多.大概是多少呢?应该是2 阅读全文
posted @ 2019-01-02 16:01 zzuqy 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 听名字非常的厉害了,它是线段树的高级应用. 考虑如果你需要很多很多线段树的话,你需要开很多很多空间.但是如果这些线段树之间非常相似,我们可以把这一个线段树和上一个线段树共用大部分的节点. 比如一个对与一个数组建立主席树,一个个的把元素放进线段树的话当然可以把重新做一个线段树,但每次只有logn个节点 阅读全文
posted @ 2019-01-02 08:47 zzuqy 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 好了今年最后一天,写一个博客好了. 先说题: 首先我们打开计算器调到程序员来模拟一下样例: 题意就是对于这个数n如何加上一个新数后使得二进制下的新数1的数量小于等于k 考虑贪心,设答案是ans,为了让ans最小当然要使得新数最小.每次必须要往上加,那答案应该是把第k个1和之后的1都弄掉,换成这样子: 阅读全文
posted @ 2018-12-31 19:05 zzuqy 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 这题看起来长得就很像某些dfs例题,但是n=1000也太大了. 考虑怎么来搞这道题呢?注意到A处理完后B才开始处理,是否最优解一定是让A快速处理完一个物品后让B开始处理? 我们把物品分为两类:A>B的和B>A的.一定是先处理A<B的再开始处理A>B的.这样可以让A对于B>A的物品更多的缓冲时间.具体 阅读全文
posted @ 2018-12-18 14:57 zzuqy 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 当时有人说: 于是去看了一眼,觉得动归很可写啊,于是写了写转移发现不太能直接转移,因为异或不一定是加还是减,滚动数组不好搞.于是算了算2^100也才六万多,完全可以开E*2^B的数组保存状态. 借用c++自带的^运算就写成了这样子 然后发现自己日常读错题:人家首先要求要从已有的数开始异或.而且至少运 阅读全文
posted @ 2018-12-17 15:21 zzuqy 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 也要提供一下原题面: 一句话题意:找长为5的lis的方案数. 考虑到长度只有5,可以写五个树状数组维护记录长为1,2,3,4,5时最后一个元素小于i的方案数sum(i).对于数a[i],先查长为1的数里小于a[i]的方案数.如果为0就算了,否则把这些方案数加到长为2的树状数组里.一直进行这样的操作即 阅读全文
posted @ 2018-12-12 13:25 zzuqy 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 首先理解题意。一句话翻译就是:给出长为m的数列求长为n的字典序最大不下降子序列。 看到只有两个人过,看似很难,实际上。。确实很难,从夏天见到的这个题就开始想并得到了一个错误算法,想了好长时间。 首先二分求lis应该都会吧。首先处理出以每个点为起点的最长不下降序列长度len,考虑对于第i个元素我们要找 阅读全文
posted @ 2018-12-07 21:10 zzuqy 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 背包两联发... 这道题看上去和前一题相似,也是组合后求最值.依然可以开三位数组flag[i][f][j]表示该状态能否到达.然后跑20*2000*2000*2000.这样复杂度看来搞不了.考虑如何优化. 这道题和上一题不一样的地方在于:每个宝藏必须分给某个人.也就是说,对于第k个宝藏必须要求i+f 阅读全文
posted @ 2018-11-20 12:44 zzuqy 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 题意就是对于n个数字构成两个相等的数的方案中 能构成的最大的数是多少. 首先当然可以暴力dfs拿不了多少分.看到塔的总高度不大,我们可以考虑动态规划中的背包. 设flag[i][f]表示状态.如果等于一说明第一个数是i第二个是f的情况可以达到.那么对于每个高度th可以枚举所有可能的状态,如果有fla 阅读全文
posted @ 2018-11-20 12:38 zzuqy 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 拿到题后先分析题意:求n个牛棚中能够扩张的数量. 然后看数据范围确定解法:n<=25000不能写n^2枚举.坐标范围是[0,1000000],不论是时间还是空间不能写地图标记flag后判断... 考虑如果只有左右两个墙,问你能像左右拓展的牛棚数量.这个时候发现还是不能写整个[0,1000000]范围 阅读全文
posted @ 2018-11-19 18:31 zzuqy 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 一道经典的有依赖的背包问题. 我们先从01背包说起.有一群物品给定了重量w和收入v,问在一定资金下最大的收入是多少.作为一道经典的背包大家应该都会,o[i]表示i块钱时的最大收入,每个物品都可以使价格i从o[i-w]转移过来,即o[i]=max(o[i],o[i-w]+v);所以读入每个物品的时候可 阅读全文
posted @ 2018-10-22 21:20 zzuqy 阅读(168) 评论(0) 推荐(0) 编辑
摘要: stm来源noi,吓死了. 之前多次路过这道题,发现处理每个馅饼的到达时间好像可以是向下取整也可以是向上取整,如果对着样例调的话又很浪费时间,于是一直没写.况且学姐说数据错了.今天突然发现是刚好到达才算,那就好搞很多. 考虑每个馅饼到达底部的时间应该是tt+(h-1)/tv,然后对于时间和位置做二维 阅读全文
posted @ 2018-10-21 21:43 zzuqy 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 终于a掉了这破题,挣扎了一上午... 克鲁斯卡尔求最小生成树的过程是将边排序后对于所有边用并查集判断两端点是否在一个集合内,如果不在就启用这条边,将两端点连一块,否则就不用. 原理大概是根据定理:"任意一颗最小生成树一定包含无向图中权值最小的边"那么有推论"设G=(V,E)是一个连通网络,U是顶点集 阅读全文
posted @ 2018-10-17 15:43 zzuqy 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 好像博弈论整个都是一个大dp,而转移连我都会.步数好好考虑一下也可以想到怎么搞,为什么这么少人A. 先来一个素数筛模板,只要筛到十组数组中的最大值就好.得到素数个数sum与各个素数prime[i]; 然后对于每个i取石子时我们减去能减的素数,一旦拿掉某个素数个数后变成了必输态就一定是必胜态,赋值为1 阅读全文
posted @ 2018-10-16 21:20 zzuqy 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 逆元是一个很有用的东西,还记得上半年不会逆元丢了许多许多分,最近算是恶补了一下,许多题都能AC了. 它的作用是处理膜意义下的除法运算,因为膜的时候对除数取余是错误的,这个时候就要用到逆元. 一.log2(mod)求mod为质数时任何数 的逆元 二.递推1到n的逆元 三.递推!1到!n的逆元(主要用于 阅读全文
posted @ 2018-10-16 19:13 zzuqy 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 乱搞大法好!什么树的dfs序+线段树都是辣鸡. 这道题看似很难,但是它给了每个人的回房顺序,那么就好搞很多. 先存起来每个房间进入的时间和每个人进入的顺序,然后直接dfs. 根据dfs的性质当前一定只通过这个房间所在的一条路直接下来,那么只要求出这个过程中时间比自己小的就好,我们想到了再用一个高级数 阅读全文
posted @ 2018-10-16 18:58 zzuqy 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 本次考试: 第一题通过与李泽铎相同的办法想了出来:能拿钱的原因在于最左右两边的钱只算了一次,而中间的都算了两次.只要拿中间的补上就可以了,让那部分钱承担更多"责任".如果第一个拿走了x,那么以后偶数个都要加x,没有任何关系.但奇数位置都要减少x,如果减少到0就不满足题意了.而且如果n为偶数时最后一个 阅读全文
posted @ 2018-10-08 20:56 zzuqy 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 可能这是我的巅峰了吧. 这题什么意思呢. 有一堆数,m秒内总选取最大的一个下手:把它分成⌊x*u/v⌋和x-⌊x*u/v⌋.其他的都增长q;求每秒内的最大数和最后的所有剩下的数. (本题可以上一个优先队列很快的就水了,但是oj不允许哇.) 考虑不增长的时候怎么做?我们来开三个队列.先把最开始的长度排 阅读全文
posted @ 2018-10-06 07:16 zzuqy 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 本题有两个要点:输出的顺序与"每个字母在转盘中只会出现一次"; 然而它还是一道模拟题.开一个字符数组是当前转盘,now模拟指针,每次读入ci后now=(now+ci)%n,(这样转盘就被限制在了0到n-1之间).对于chi,如果当前now有了还不是chi就输出!,否则判断chi是否出现过,记录一下. 阅读全文
posted @ 2018-10-05 20:12 zzuqy 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 本题的那个操作可以想到相当于把自己的一个质因数给了别人. 那么既然大家的质因数可以共享,不如我们先给同一个人,然后再均分.均分后的那个数就是调整完的最大公约数. 那么本题的策略就有了,找到所有数的所有质因子与质数和,答案是∏prime[i]^(⌊sum[prime[i]]/n⌋); 做第二问的时候可 阅读全文
posted @ 2018-10-05 19:52 zzuqy 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 十月的停课集训开始了,祝我顺利. 半上午时间搞了这道题,感觉非常的值得. 和当年做的某两题题目类似吧,但是又有很大区别.可以想到两个点间的距离是max(Δx,Δy); 可以很快想到暴力算法:枚举每对点并计算距离后相加.但是本题的点数是<=m*n的,这个算法就是n*n*m*m,GG 刚开始没有注意到可 阅读全文
posted @ 2018-10-04 14:32 zzuqy 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 十分钟A掉23333. 为了代码更简单易写,考虑到n*ti也不大(<10^8),n*ti*si也不大(<intmax),可以开一个数组记录每个时刻两人的位置,然后跑一边所有时刻,两个人的位置进行判断就好了. 然而两人还可能在一块跑很长时间,也就是位置一直一样,就不能根据i与i-1的关系直接判断,但是 阅读全文
posted @ 2018-09-29 12:39 zzuqy 阅读(120) 评论(0) 推荐(0) 编辑