LOJ
ff_666
开心最好。。但现在正是奋起之时!!!
展开
-
LOJ2452
LOJ2452一眼看去,有点像LOJ2427,然后。。那是想多了 好像没有什么好办法 仔细分析一下:首先显然只有偶数串才能成功而且假如[L,R][L,R][L,R]成功了,则[L+1,R−1][L+1,R−1][L+1,R-1]一定成功这样不就可以hash+二分枚举了吗?#include<bits/stdc++.h>#define gt() (p1==p2&...原创 2018-08-20 10:25:15 · 422 阅读 · 0 评论 -
LOJ10068(BZOJ1977)(Luogu4180)
LOJ10068这是严格次小生成树的模板题~~我们首先考虑非严格次小生成树: 可以证明,只要更改原图一条边就是满足条件的最优解: 首先我们假设加入一条边E,则最小生成树上形成了一个环,贪心的想法,我们会选择环中最长的一边替换掉假如再添加一条边E_(显然E_&amp;amp;gt;=E)若E_不在该环中,由于原图已为最小生成树,答案绝不会变小若E_在该环中,由于E_&amp;amp;gt;=E,答案也不会变...原创 2018-08-24 11:16:01 · 267 阅读 · 0 评论 -
LOJ10133
LOJ10133现在才发现写LOJ10068大材小用了。。 不过想法就是那篇。。#include<bits/stdc++.h>#define gt() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)#define Up up[x][i-1]#define LL l...原创 2018-08-24 12:31:54 · 256 阅读 · 0 评论 -
LOJ10069(BZOJ2654)
LOJ10069我们考虑Kruscal,显然边权越小越早被考虑 所以白边的边权变小后,所能加进最小生成树的边数绝对不会变少(感性理解,有很大几率变多。。) 所以我们就可以二分“每条白边的增量(可以为负)” 每次求出当前最小生成树后,更新的答案要减去need*mid ——如果有超过need条白边被用,超过的那部分一定能用黑边顶替,因为题目保证一定有恰好的解。。#include&amp;l...原创 2018-08-24 13:39:00 · 185 阅读 · 0 评论 -
LOJ10051
LOJ10051这题实际上就是加强版的LOJ10050 由于异或一个数偶数次等于啥也没干,所以异或是可以构造“前缀异或”的 那么固定一个终点iii,则我们就是类似“最大连续子段和”一样要找一个max(Simax(Simax(S_i^Sj)Sj)S_j) ——这不就是LOJ10050吗!!!开两个数组L(从左往右),R(从右往左)记录最优解,传递,更新答案即可 O(N∗30)O(N∗...原创 2018-08-21 14:46:06 · 182 阅读 · 0 评论 -
LOJ10052
LOJ10052同LOJ10049,就是读入有毒。。#include&amp;lt;bits/stdc++.h&amp;gt;#define gt() (p1==p2&amp;amp;&amp;amp;(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)#define isnum(ch) (ch&amp;gt;='0'&amp;amp原创 2018-08-21 15:08:53 · 146 阅读 · 0 评论 -
LOJ10070(BZOJ1016)(JSOI 2008)
LOJ10070这题,需要知道最小生成树三定理 然后就很简单了。。 对于每种相同边权进行2102102^{10}的枚举,乘法原理统计答案。。#include<bits/stdc++.h>#define gt() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)usi...原创 2018-08-24 15:04:08 · 164 阅读 · 0 评论 -
LOJ10057
LOJ10057AC自动机模板题(但我只会WA自动机、TLE自动机,CE自动机……) 实际上就是把KMP做到了Trie上。。#include<bits/stdc++.h>#define gt() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)#define pt(c...原创 2018-08-24 15:33:41 · 115 阅读 · 0 评论 -
LOJ10053
LOJ10053字典单词长度这么小,直接写个Trie(真真正正的字典树) 然后类似DP刷表法一样,更新下一状态 如果当前状态能扩展出来,才继续扩展 O(m∗len文章∗len单词)O(m∗len文章∗len单词)O(m*len_{文章}*len_{单词})#include<bits/stdc++.h>#define gt() (p1==p2&&(p2...原创 2018-08-21 15:58:49 · 450 阅读 · 0 评论 -
LOJ10058(BZOJ4327)
LOJ10058AC自动机,我们就是在Trie上用nxt指针跳来跳去。。 那么假如我们跳到一个节点x上,就说明Trie上0~x一路遍历下来组成的字符串在模板串中出现过 这样我们就在正常做AC自动机时打标记 之后从词尾位置往上跳到第一个标记即可。。#include&lt;bits/stdc++.h&gt;#define gt() (p1==p2&amp;&amp;(p2=(p1=...原创 2018-08-24 16:13:38 · 446 阅读 · 0 评论 -
LOJ10059(BZOJ3940)(Luogu3121)【USACO 2015 Feb. Gold】
LOJ10059这题,乍一看,不就是LOJ10048嘛? 然后有N个单词。。多个KMP——AC自动机!!! 然后构造出这样的AC自动机:if(AC.c[x][i]) AC.nxt[que[++tal]=AC.c[x][i]]=AC.c[AC.nxt[x]][i]; else AC.c[x][i]=AC.c[AC.nxt[x]][i];就可以写个栈一路走就好了。。...原创 2018-08-25 09:41:47 · 558 阅读 · 0 评论 -
LOJ10060(BZOJ3172)【TJOI 2013】
LOJ10060这题题目大意:给你N个单词(也是N段文章),求每个单词在这N段文章里的出现次数然后随手写了个AC自动机——TLE了一个点。。#include&lt;bits/stdc++.h&gt;#define gt() (p1==p2&amp;&amp;(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)#de...原创 2018-08-25 11:03:30 · 424 阅读 · 0 评论 -
LOJ10061(BZOJ1195)(Luogu2322)【HNOI 2006】
LOJ10061N这么小,果断状压 那么构造AC自动机,直接暴力枚举添加字符即可。。 并且别忘了将nxt[x]的状态传递过来 ——因为如果当前串已经出现,那么nxt[x]也一定出现 所以就在构造AC自动机时加一句话:void getnxt(){ int hed=0,tal=0,x,i; for(int i=0;i<26;i++) if(AC.c[0][i]...原创 2018-08-25 13:00:51 · 166 阅读 · 0 评论 -
LOJ10062(BZOJ2938)(Luogu2444)【POI 2000】
LOJ10062这题我们反向思考: 假如我们造出了一个无限串,在AC自动机上匹配,会发现什么? 显然,不会到达任意一个“有毒点”,所以会在有毒点之前借助nxt往回跳 然后既然是无限长,那么肯定会卡在某个环里 所以就可以**从根开始**DFS找环就好了。。 PS:不要忘记构造AC自动机时“有毒点”的向下转移! 复杂度:玄学,O(能过)O(能过)O(能过),有了重复标记大概为O(∑|S...原创 2018-08-25 14:10:54 · 162 阅读 · 0 评论 -
LOJ10063(BZOJ1030)(Luogu4052)【JSOI 2007】
LOJ10063这题,不就是给你N个单词,在26N26N26^N个文章里查嘛 然后肯定建好AC自动机后,考虑计数DP 正难则反,我们定义这样的DP: F[k][x]表示走了k步,走到Trie上的第x个节点,且严格组成“火星文”的方案数 ——那么显然,当儿子可走时累计答案:F[k+1][son]+=F[k][x]F[k+1][son]+=F[k][x]F[k+1][son]+=F[k][...原创 2018-08-25 15:15:33 · 171 阅读 · 0 评论 -
LOJ10072
LOJ10072这题,N这么小,可以想到O(N3)O(N3)O(N^3)枚举三个点i,j,ki,j,ki,j,k 此时贪心想法,构成的环最小为w[i][k]+w[k][j]+min_w[i][j](最短路)w[i][k]+w[k][j]+min_w[i][j](最短路)w[i][k]+w[k][j]+min\_w[i][j](最短路) 可是显然,要求i−−>ji−−>ji-->...原创 2018-09-12 19:37:36 · 191 阅读 · 0 评论 -
LOJ10050
LOJ10050异或:相同为假,不同为真 贪心想法,从高位到低位枚举,尽量在上一次的基础上选出两个该位不同的 ——因为高位上一个“1”就大于接下来的所有低位上“1”的加和然后Trie维护,将每个数看成二进制32位就OK了 然后对于每个数,匹配一下: 有不同的,就走 不然就走相同的#include&lt;bits/stdc++.h&gt;#define gt() (p1=...原创 2018-08-21 13:52:29 · 245 阅读 · 0 评论 -
LOJ10049
LOJ10049Trie裸题(虽然我写这SB题写了快一小时) 对字符串建树的同时刷答案,有两种情况:经过了一个字符串的词尾(即过了一个标记点)一直在另一个字符串里走(没有让树长出新枝)#include<bits/stdc++.h>#define gt() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,std...原创 2018-08-21 13:08:24 · 177 阅读 · 0 评论 -
LOJ2427
LOJ2427不需太多处理 hash一下直接暴枚吧。。 考虑这样两层循环for(int i=1;i&lt;=n;i++) for(int j=i;j&lt;=n;j+=i)是不是很像筛法挖素数?可以证明复杂度是O(N∗logN)O(N∗logN)O(N*log_N)的 然后就OK了 PS:可以加类似剪枝的优化#include&lt;bits/stdc++.h&gt...原创 2018-08-20 09:34:44 · 182 阅读 · 0 评论 -
LOJ10041
LOJ10041 LOJ关于内存计算真有毒,大概用到元素才计入内存吧。。 然后就变成SB题了,连map都不用。。#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxt=(1e9)+5,Max=2e6;int A,B,C,now;bool vis[maxt];int ma...原创 2018-08-20 10:46:27 · 186 阅读 · 0 评论 -
LOJ10042
LOJ10042 这题瞎搞一大堆。。讲正解:假如Ai<=NAi<=NAiL,RL,RL,R维护当前区间 每次L++L++L++,相应得尽量推RRR指针,更新答案就好了然后AiAiAi辣么大,怎么办?数字哈希? ——非常有毒,撞车概率极高 sort离散一下,根据大小关系给个所谓的hash值就好了#include<bits/stdc++.h>#...原创 2018-08-20 11:10:57 · 171 阅读 · 0 评论 -
LOJ10043
LOJ10043KMP裸题,每次匹配完从头开始就好了#include<bits/stdc++.h>#define pt(ch) (Top<1000000?St[Top++]=ch:(fwrite(St,1,1000000,stdout),St[(Top=0)++]=ch))using namespace std;int Top;static char St[10...原创 2018-08-20 12:01:39 · 142 阅读 · 0 评论 -
LOJ137(LOJ6021)
LOJ137这题,真心整死人。。 首先,国家集训队论文里有一篇有关文章:郭华阳 RMQ与LCA问题然后有一个定理: 两点间最小瓶颈路一定是最小生成树上两点间唯一路径上的最大边所以先求原图的最小生成树,这题就变成求树上两点间唯一路径上的最大边了 然后倍增?O(10000000∗log)O(10000000∗log)O(10000000*log)?T到飞起。。再怎么...原创 2018-08-23 10:48:18 · 737 阅读 · 0 评论 -
LOJ10045
LOJ10045考虑KMP的失配fail指针 指向的显然是离自己最近的相同串。。有点难以表达 举个例子: abcabcabcabcabcabcabcabcabc 那么最后一个ccc就指向前一个ccc,匹配成这样: abcabcab|c|abcabcab|c|abcabcab|c| (原串) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abcab|c|ab...原创 2018-08-20 14:27:43 · 134 阅读 · 0 评论 -
LOJ10046
LOJ10046这题有点像反的LOJ10045,只不过这次要尽量长 KMP是找最近的,因此我们再开一个lst[]lst[]lst[],从左往右扫,更新lst为最远的相同子串 (PS:由于要统计长度,iii要1~N枚举)#include<bits/stdc++.h>#define LL long long#define __R registerusing names...原创 2018-08-20 15:27:49 · 172 阅读 · 0 评论 -
LOJ10056
LOJ10056实际上,这题只要任选一个根,将无根树转为有根树,构造val[x]表示从根到x节点的异或和,就变成模板[LOJ10050]了(https://blog.csdn.net/qq_42403731/article/details/81906237%20LOJ10050) 为什么这样是对的?异或同一个数偶数次等于啥也没干异或满足交换律(x&amp;amp;nbsp;xor&amp;amp;nbsp;y=y&amp;amp;...原创 2018-08-23 12:26:19 · 180 阅读 · 0 评论 -
LOJ10048
LOJ10049分析一下暴力:每次从头KMP扫一趟 实际上,不需要从头扫 ——因为上次处理前面的部分都没挖出来,现在肯定也不会出现 但缺口处有可能拼接出一个新串,但反正是绝对轮不到前面的前面了也就是说,后面接上的肯定能压住前面的 ——这不就是单调栈吗!!!用KMP优化一下字符串比较,就可以均摊O(len)O(len)O(len)干掉此题 PS:由于这题有点不一样,KMP是要不...原创 2018-08-20 16:30:39 · 216 阅读 · 0 评论 -
LOJ2012(BZOJ4567)(Luogu P3294)
LOJ2012这题目描述的逻辑真是。。优秀 题目意思为(假设当前单词第x个学):如果有/为当前串的后缀/的单词/且没学,代价为N*N如果没有/为当前串的后缀/的单词/,学它的代价为x如果有/为当前串的后缀/的单词/,则代价为x-y(最近学的)把单词倒着存,后缀就变成前缀,可以用Trie维护假如定义“空”为所有单词后缀,则2可以看成是特殊的1 1的代价太恐怖,所以肯定要避...原创 2018-08-23 15:00:48 · 474 阅读 · 0 评论 -
LOJ10064
LOJ10064首先,Di=DSTiDi=DSTiD_i=DST_i(PRIM中) 所以可以先求一趟PRIM 再根据乘法原理来统计,连乘到达每个点的答案#include&lt;bits/stdc++.h&gt;#define LL long long#define gt() (p1==p2&amp;&amp;(p2=(p1=buf)+fread(buf,1,1000000,st...原创 2018-08-23 15:40:18 · 246 阅读 · 0 评论 -
LOJ10065
LOJ10065先求一趟正常的PRIM 贪心想法,显然是将后大的几个给卫星,然后就OK了#include<bits/stdc++.h>#define gt() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)#define D(i,j) ((a[i].x-a[j].x...原创 2018-08-23 16:05:29 · 407 阅读 · 0 评论 -
LOJ10066
LOJ10066将建井看成是向“0”号节点连边,然后正常写最小生成树就好了。。 稠密图,PRIM快#include<bits/stdc++.h>#define gt() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)using namespace std;stat...原创 2018-08-23 16:14:12 · 179 阅读 · 0 评论 -
LOJ10067
LOJ10067由原树,生成唯一的最小完全图—— 类似Kruscal的想法: 初始时将每个节点理解为自成一个联通块,按边权从小到大处理,每次合并联通块: 设当前连X与Y,X所在联通块有cnt[fx]个节点,Y所在有cnt[fy]个 两块连接后,由于要构成完全图,显然有(cnt[fx]*cnt[fy]-1)条边(除去已连的一条) 至于代价,由于要保证生成的完全图中最小生成树不变,自然边...原创 2018-08-23 16:21:17 · 155 阅读 · 0 评论 -
LOJ10047
LOJ10047这题是对KMP性质的深度挖掘啊。。已知fail指针指向的是字符串中既是前缀,又是后缀的最长串 则假如fail是father,就得到了所谓的“fail树” 我们对于一段长度为R的字符串,显然就是要找到R一直到根的节点中有没有满足介于[k,R/2)的那么就可以枚举子串的左端点L,然后边往右枚举边刷KMP的fail指针,并顺着fail指针往回找 但这样最坏是O(N3)O...原创 2018-08-21 10:02:16 · 518 阅读 · 0 评论 -
~~斜率DP初探~~[LOJ10190][APIO2010][Bzoj1911]特别行动队
写在前面斜率Dp貌似算是Dp优化中最难之一了吧~~(要不然LOJ干嘛把他放最后)~~我也是一直处于深沉的懵逼之中,不敢去动它今天问了一下同寝的Dalao CLY,终于对最简单的斜率Dp有了一丢丢的了解&理解吧直接到题目里来看吧:Problem:给出N个数,分成任意个连续段,每段的价值为a∗S2+b∗S+c,其中S=∑Xia*S^2+b*S+c,其中S=\sum X_ia∗S2...原创 2019-06-26 21:30:12 · 158 阅读 · 0 评论