自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Todobe

Two funny foolish man.

  • 博客(19)
  • 收藏
  • 关注

原创 手写“cena”

有些时候我们手中有一些数据来检验自己的程序是否正确,但是数据很多很大,手动测试很麻烦,还好有cena,lemon啥的。 但是如果没有呢? 或者你想装一波B呢? 手写一个咯~教程: step1: 用你的cpp文件生成exe文件,并把你的exe文件和测试数据放在一个目录下。像这样: 你一定要保证你的所有输入文件和输出文件有相同的前缀名,并且后面的数字是有序的。step2: 建立一个tx

2016-12-30 12:57:46 513

原创 程序对拍

神犇们说要考试的时候要用各种姿势对拍,让我们一起开心的bat吧。 写好一个程序之后想验证是否正确的时候,你可以写一个绝对正确的暴力,然后自己给自己出数据,看输出的答案是否相同。 教程: step1: 先写好三份代码,data.cpp是做数据的程序,std.cpp是标准程序,x.cpp就是你要验证正确性的代码咯。这三份代码要放在同一目录下。 step2: 把它们编译成exe文件。

2016-12-30 12:29:44 615 1

原创 费用流 【bzoj1283】序列

题目大意: 给出一个长度为 的正整数序列Ci,求一个子序列,使得原序列中任意长度为M的子串中被选出的元素不超过K(K,M<=100) 个,并且选出的元素之和最大。题目分析: 用容量为k,费用为0的边将原序列连成一条链,然后再把第i个点和第i+m个点连一条容量为1,费用为ci的边,跑最大费用最大流即可。代码如下:#include<cstdio>#include<cstdlib>#include

2016-12-29 08:16:19 455

原创 费用流 模板【SDOI2009】bzoj1877 晨跑

费用流:在网络流的边上加上一个费用值,在保证最大流的基础上,使这个费用最小。 实现方法:把dinic的bfs改成用费用跑spfa,dfs过程改成单一路径修改。模板代码如下(变量解释在代码后):bool spfa(){ queue<int> V; memset(f,0x1f,sizeof(f)); memset(road,0,sizeof(road)); V.pus

2016-12-28 21:49:07 395

原创 最小割模型——最大权闭合子图 【NOI2006】bzoj1497 最大获利

定理:最小割=最大流 最大权闭合子图: 有一些点,每一个点有一个权值,可正可负。对于某个点i,如果你选择了i,就必须选择j。现在让你选择一些点,满足上述条件,并且是权值最大。题目大意: 建立中转站i需要费用pi,如果建立了中转站ai和bi就可以获得收益ci,求最大收益。题目分析: 转化成最大权闭合子图的模型: 我们把ci具体化为一排节点,则每个点都具有ci的正权值; 另一派点代表中转站,

2016-12-28 19:47:52 403

原创 网络流 模板【Usaco2007 Open】bzoj1711 Dining吃饭

网络流 网络流通常有一个源点,一个汇点,和其他若干点,这些点之间有若干条有向边,每条边上有一个负载上限,称为容量。题目通常要求我们求出在所有边容量允许的范围内,从源点到汇点流量的最大值。 一般情况下,网络流都不会很难写,网络流题目大多数都难在建图上。dinic算法: step1: bfs给所有有可行流的点标号,建立层次网络,源点标为1,将所有能标的点标完或标到汇点结束; step2: 如

2016-12-28 19:27:28 435

原创 后缀数组+单调栈 【Ahoi2013】bzoj3238 差异

题目大意: 题目分析: 这个公式的前两项可以提出来单算,这两项的总和应该是(n+1)n/2 (n+2)。 问题就转化成了求任意两个后缀的lcp之和。 我们知道两个后缀的lcp就是height数组取min,那么反过来想,一个位置能影响到的就是自己前面和后面且height值大于当前位置height值的连续的部分(按照个人理解就是以这个位置的lcp当作桥梁,算出一部分lcp的长度), 问题转化为了

2016-12-28 15:45:46 373

原创 后缀数组 【TJOI2013】 bzoj3172 单词

题目大意: 给定一些单词,这些单词组成一篇文章(单词与单词之间有空格),问每个单词在这篇论文中出现多少次。题目分析: 可以再单词与单词之间插分隔符,然后用后缀数组来排序,但是排完也没有什么用,并不能用这个序列来做什么。 但是我们发现,前缀相同的后缀一定被排到一块了,所以我们可以利用这个性质来解决问题。 引入一个数组height,height[i]代表排名为i的后缀与排名为i-1的后缀的最长公

2016-12-28 09:32:23 588

原创 后缀数组 模板【JSOI2007】 bzoj1031 字符加密Cipher

后缀数组 处理多个字符串用AC自动机就很方便了,但是AC自动机需要空间巨大,很可能爆内存,后缀数组被引入了。后缀数组主要是两个数组 第一个是sa数组,sa[i]代表排名为i的后缀的首字母的位置; 第二个是rnk数组,rnk[i]代表首字母位置为i的后缀的排名。最先要做的就是求出这两个数组。 其实有很简单的办法,那就是把后缀sort一下,拍个序,统计一下排名,万事大吉。 如果时间复

2016-12-28 08:51:34 571

原创 AC自动机 【JSOI2007】bzoj1030 文本生成器

题目大意: 给出N个由大写字母组成的字符串,再给出一个长度M 求有多少个由大写字母组成的长度为M的字符串满足“至少包含这N个字符串中的一个” 答案对10007取模题目分析: 直接求满足至少包含N个字符串中一个的字符串个数不好求,那我们可以求一个都不包含的个数,再用总个数(26^M)减去就可以了。 把所有的串扔到AC自动机中,我们避开单词节点做DP; 设f[i][j]代表到第i个字符,是第

2016-12-27 19:43:35 449

原创 AC自动机【poi2000】bzoj2938 病毒

题目大意: 给一些01串,询问有没有无限长的串其中不包括给定的串。题目分析: 如果想要无限长的串,那它应该是一个循环的串。 只需要建一个AC自动机,然后在其中找到一个不包含单词节点的环就能顺着这个环找到一条无限长的01串且不包含给定串。注意事项: 1、走过的节点要标记一下,不能再走一遍(会WA,还会TLE)。代码如下:#include<cstdio>#include<algorithm>

2016-12-27 19:27:37 438

原创 AC自动机 模板 【HDU2222】 Keywords Search

AC自动机(Aho Corasick Automaton) 如果匹配字符串,一个模式串,一个匹配串,KMP就搞定了。 但是如果现在有多个模式串怎么办呢?每个模式串都处理一遍,再与匹配串匹配就太慢了,所以有了AC自动机,来解决这类问题。AC自动机可以看成是Trie树和KMP的结合体,具体的实现方式就是在每个节点处增添一个fail指针,作用与KMP中的失配时用的跳转数组差不多(虽然在匹配的大多数时候

2016-12-27 18:00:41 431

原创 KMP 【bzoj3942】 Censoring

题目大意: 把所有的与模式串相同的串都去掉,输出处理后的字符串。 去掉一个串后可能会产生新的串。题目分析: KMP 需要用栈来维护最后剩下的字符串,和每一个字符分别匹配到了模式串的哪个位置,最后输出栈里的字符。代码如下:#include<cstdio>#include<algorithm>#include<iostream>#include<cstdlib>#include<cmat

2016-12-27 17:36:46 488

原创 KMP 模板+简单讲析 【HDU2087】 剪花布条

KMP 处理字符串匹配,暴力枚举O(n*n)是很好写的,但是很多题目接受不了这样的时间复杂度,然后KMP算法诞生了。举个例子先: 模式串:abb 匹配串:ababb 匹配到第三个字符时失配了,如果是暴力匹配这时我们又会用模式串的第一个a来匹配匹配串的第二个b,这显然是很多余的操作,因为不可能匹配成功。这样浪费了巨量的时间,KMP算法则是用O(n)的时间来处理一下模式串,从而使匹配更有效率。那

2016-12-27 17:29:55 412

原创 数论【Sdoi2010】 古代猪文

题目大意: 给定N和G 求G^x mod 999911659 的值题目分析: step1: 观察第一个式子,k可以在sqrt(N)的时间内枚举出来;step2: 但是这个x求出来必然时巨大的(因为N是1e9级别的), 根据费马小定理,a^(p-1)≡1(mod p)(gcd(a,p)==1) 因为999911659是质数,所以当G不是它的倍数的时候必然是与它互质的,那么G

2016-12-26 22:45:22 793

原创 splay 新模板 【bzoj3223】 文艺平衡树

上次写splay拿noi2015维修数列来练手,当时觉得自己写得还挺好的,但是后来发现那个模板居然不能拿来写LCT(其实应该也可以写的,但是我是蒟蒻,我不会)。所以又发愤图强,去各大神犇博客中学习,终于写出了新的模板。与之前的不同: 1、设虚节点,可以降低崩溃的几率; 2、旋转和splay等函数不需要打引用; 3、splaying用循环的方式,代替原来递归的方式,省空间。注意事项: 1、在写

2016-12-26 10:02:13 643

原创 凸包 【uva11168】 Airport

题目大意:有一些点,找到一条线使所有的点在这条线的同一侧,并且让所有的点到这条线的平均距离最小,并输出最短距离。题目分析:我们可以想到如果一条线穿过凸包,那么一定有两个或两个以上的点在这条线的两侧,所以这条直线一定不穿过凸包。然后可以证明,凸包上的线一定比与凸包相离的线更优。那我们就弄一个凸包,然后枚举凸包上的所有线,比较平均距离值就好啦。凸包我们可以O(n)的时间求出

2016-12-17 15:59:12 455 1

原创 树链剖分+线段树【SDOI2011】 bzoj2243 染色

题目大意:给一棵树,每个节点有一个颜色。写一个程序支持把两个点路径上的所有点染成一个颜色,查询两点之间的色段数量。解题思路:树链剖分+线段树首先它是一颗树,而且是修改和查询两点路径上的颜色,可以想到树链剖分。查询颜色段数可以用线段树维护区间颜色段数。这道题涉及到区间合并,所以在线段树和lca的时候需要多记录一些东西,当前区间的最左边的颜色,最右边的颜色,已经求出的区

2016-12-11 08:04:56 406

原创 Splay 模板【NOI2005】 bzoj1500 维修数列

老师说写博客有助于学习和理解代码,所以从今天起,做一个写博客的人,面朝代码,春暖花开o(n_n)o。Splay是一种可以对一个数列进行区间修改,区间反转,查询最值,查询总和等操作的数据结构(我觉得Splay的结构类似于treap,功能类似于线段树),而且能够快速实现区间的分裂与合并。Splay与Treap的最大区别是旋转方式,Treap将树按照堆得形式维护,只需要单旋。而S

2016-12-10 22:54:52 471

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除