自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

转载 因为我们是OIER

我们是OIer,所以我们不用在跑道上挥汗如雨;不用在球场上健步如飞;更不用在没事的时候,经受非人的体能训练……但是,我们却要把头脑高速运转,还要接受一大堆大学生也只是“了解即可”的知识,把一个个抽象的问题转化为一篇篇优美的代码,才能在F9按下以后获得欢呼。不要以为我们机房里没有风吹,没有日晒,就比勤劳的体育生们

2015-11-09 08:39:56 1001

原创 BZOJ3653——谈笑风生(dfs序 && 树状数组)

现在有一颗以 1 为根的有根树,有m 个询问,每次给定a, k, 求满足条件的三元组(a, b, c)(a 就是已经给定的那个),条件:1、a, b距离不超过 k,2、a,b都是c的祖先。首先比较显然的是需要分类:a). b 在a 的上面所构成的三元组,显然这样的可以直接统计出来,即 min(dep[a], k) * (size[a] - 1),每一个上面的和 a的子树中每个点

2016-05-19 15:11:05 621

原创 Treap——题目方法总结

一、查询整体区间第K大 && 序列中比 x 小的数的个数例题:spoj3273.ORDERSET——初始一个空序列,支持插入、删除一个数,查询整个序列中的第K大和整个序列中小于x的数的个数。难度:**这是Treap的模版题,操作也都是基本操作,不错的一道模版题,但是spoj实在太慢了...写不好会莫名TLE#include #include #include #d

2016-05-16 10:10:50 1182

原创 BZOJ 2251.[2010Beijing Wc]外星联络(Trie)

给定一个01串,输出子串出现次数大于1次的次数,按子串的字典序输出。首先应该知道:把一个字符串的后缀依次加入Trie树中,用Trie树就能不重不漏的表示这个字符串的所有后缀,而且按这棵Trie树dfs的顺序得到的后缀就是字典序的。这样直接统计就可以了。CODE:#include #include #include using namespace std;const int

2016-04-27 11:19:28 634

原创 练习——后缀数组题目

BZOJ 1717题意:给一个字符串,求最长的出现至少K次的子串,子串可以重叠。难度:*和模型一样,直接上。CODE:#include #include #include using namespace std;const int MAX_N = 20005;int n, K, a[MAX_N];void init(){ scanf("%d%d", &n

2016-04-27 09:03:50 1137

原创 梳理——后缀数组应用

// 难度从 * ~ ***** 递增,*为简单2016.03.4.241. POJ 2774题意:给两个长度不超过 100000 的字符串,求他们的最长公共子串。难度:*算法&&技巧:字符串拼接, 后缀数组,找 Height 数组中最大的(注意特判两个是否属于不同字符串)

2016-04-25 08:45:03 1831

原创 bzoj2434(NOI2011).阿狸的打字机(AC自动机 && DFS序 && 树状数组)

阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机。打字机上只有28个按键,分别印有26个小写英文字母和 'B'、'P'两个字母。经阿狸研究发现,这个打字机是这样工作的:l 输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母加在凹槽的最后)。l 按一下印有'B'的按键,打字机凹槽中最后一个字母会消失。l 按一下印有'P'的按键,打字机会在纸上打印出凹槽中现有的所有字母并换

2016-04-22 14:28:55 385

原创 bzoj3172.单词(AC自动机)

有 N 个单词组成了一篇文章,求每个单词在这篇文章中出现了多少次。多个字符串匹配的问题,建立AC自动机。如果某个单词在 i 节点出现了,那么在 i 节点fail 指针所指节点也出现过。CODE: #include #include using namespace std;const int MAX_N = 1000005;struct Trie { int ch

2016-04-22 14:11:31 387

原创 hdu2243.考研路茫茫——单词情结(Trie图 && 矩阵乘法)

背单词,始终是复习英语的重要环节。在荒废了3年大学生涯后,Lele 也终于要开始背单词了。一天,Lele 在某本单词书上看到了一个根据词根来背单词的方法。比如"ab",放在单词前一般表示"相反,变坏,离去"等。于是Lele想,如果背了N 个词根,那这些词根到底会不会在单词里出现呢。更确切的描述是:长度不超过L , 只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个呢?

2016-04-22 08:31:03 669

原创 poj2778.DNA Sequence (Trie图 && 矩阵乘)

有一些病毒串,求长度为 L的且不包含任意一个病毒串的字符串数量。首先多串匹配,所以要建立 Trie 图(AC自动机)。而 L 很大,我们需要一个 O(log n) 的算法。考虑要得到一个长度为n 的字符串,也就是在 Trie 图上走了 n 步。是不是似曾相识,很自然地就能想到矩阵乘法:首先根据Trie图 求出 mat[ i ][ j ] ,表示从 i 节点到j 节点走一步能

2016-04-22 08:20:13 419

原创 POJ3691.DNA repair (Trie图 && DP)

给你若干个字符串,再给你一个字符串 T ,求最少修改T 中的多少个字符,能使 T 不包含给出的若干个字符串。首先是多串匹配问题,所以我们自然而然地想到了AC 自动机。然后考虑 DP:f[ i ][ j ] 表示查找第i 个字符时在自动机上的状态为 j 的答案, 然后枚举下一次转移的字符,如果下一次转移的字符和T 下一位要匹配的一样且不是病毒串,那么答案不变,否则答案 + 1,当

2016-04-21 20:25:34 642

原创 SPOJ3273.ORDERSET(Treap 模版)

一个空序列,支持过插入一个数,删除一个数,要查询当前序列第 k 大是哪个数,或者比 x 小的数有几个。Treap 模版题#include #include #include #define inf 1500000000using namespace std;typedef long long LL;const int N = 300005;struct treap {

2016-03-07 21:00:59 429

原创 HNOI2007.BZOJ1189.紧急疏散(最大流 && 二分)

有一个 N * M 的矩形区域,每个格子如果是 ‘ .’ 则此处有一个人,如果是 ‘ D ’ 则这里是门(门只出现在边界上),否则这里就是墙。每个人可以在单位 1 的时间走到与其相邻的上下左右任意一个格子里,也可以不动。每个格子可以站无数个人,但是每扇门每一个单位时间只能出去一个人,问所有人离开这个矩形区域所需最短时间,如果不行,输出 ‘ impossible ' 。二分时间,再用网络流判

2016-02-24 09:36:07 375

原创 2011清华集训.BZOJ2561 && THU A1277.最小生成树(最小割)

有一个 n 个点, m 条边的图,现在多加入一条边 ,求最少要删去多少条边,才能使边 既可能出现在最小生成树上,也可能出现在最大生成树上。设后加入的边的长度为 L,那么只有原图中小于 L的边不能再用的时候, 才可能出现在最小生成树上,用最小割可求。最大生成树时同理。两次答案相加。#include #include #include using namespace std;

2016-02-23 14:43:50 704

原创 bzoj1717.产奶的模式

给出一个长度为 n 的数字序列和一个 K,求最长的出现了至少 K 次的子序列的长度。经典问题,求出 Height 数组, 二分答案然后判断是否有一组的后缀个数大于等于 K。#include #include using namespace std;const int MAX_N = 20005;int n, K, a[MAX_N], sa[MAX_N], r[MAX_N],

2016-01-08 15:41:41 512

原创 NOI2015.品酒大会(后缀数组)

给出一个 长度为 n 的字符串,每一位有一个权值 val。定义两个位字符为 r 相似,是指分别从这两个字符开始,到后面的 r个字符都相等。两个 r 相似的字符还有一个权值为这两个字符权值的乘积。问对于 r = 0, 1, 2, … , n - 1,统计出有多少种方法可以选出2 个“r 相似”的字符,并回答选择 2 个”r相似”的字符可以得到的权值的最大值。 首先说一个暴力的做法

2016-01-08 14:06:49 2330

原创 后缀数组应用——多个字符串的相关问题

1、不小于 K 个字符串中的最长子串(POJ 3294)给出 n 个字符串,求在至少K 个字符串中出现过的最长的子串虽然是多个字符串,但是还是用老方法:将这n 个字符串接在一起,中间用没有出现过且不重复的字符分隔开。求出 SA,Height 数组。二分答案,然后把后缀进行分组, 最后判断是否至少有一个组内有K 个来自不同的字符串的后缀即可。时间复杂度 O( nlogn )。

2016-01-08 07:28:59 357

原创 后缀数组应用——公共子串的个数

长度不小于 K 的公共子串的个数(POJ 3415)给出两个字符串 S 和 T,求他们长度不小于给定K 的公共子串的个数首先把两个字符串拼接在一起,中间用一个没有出现过的字符做分隔符。求出新字符串的SA, Height 数组,类似求重复子串的方法,按 K 把 Height 数组分组。分别对于S 的每一个后缀, 求他前面有多少个 T 的后缀与其的公共前缀大于 K。但是这样直接做复

2016-01-06 09:32:30 1073

原创 后缀数组应用——公共子串

最长公共子串(poj2774)给出两个字符串,求出他们的最长公共子串寻常的做法是 O( n ),或者 O( nlogn )。用后缀数组我们可以做到O( n ),非常高效。首先我们知道任意一个子串都是原串的某个后缀的一个前缀,那么我们把两个串接在一起,中间用一个没有出现过的字符做分隔符。问题就转变成了这个新字符串的后缀的最长前缀。那么是不是只要找Height 数组中最大的就可以了??

2016-01-05 15:22:16 520

原创 后缀数组应用——回文子串

最长回文子串 (ural1297)给出一个字符串 S,求出它的最长回文子串是什么。当然,可以用 manacher 做,但是这篇要说的的是用后缀数组的做法:枚举每一位,求以这一位为中心的最长回文子串是什么。我们把原字符串反转并把它接在原字符串的后面,中间加入一个分隔符,这样问题就变成了求这个新的字符串的某两个后缀的最长公共前缀(如图)。注意回文子串为偶数和为奇数是两种情况,要区分一下。总

2016-01-05 09:02:22 1080

原创 后缀数组的应用——重复子串

重复子串:字符串 S 在字符串 T 中至少出现两次,则称 S 是 T 的重复子串一、最长可覆盖的重复子串只需求出字符串的 SA [],Height [] 数组,答案就是 Height 中最大的那个。二、最长不可覆盖的重复子串 (POJ 1743)求出 Height 数组,二分答案。问题就转变成了是否存在两个长度为 K 的相同字符串,且不重叠。按 K 分组,若 Height

2016-01-04 15:08:20 586

原创 bzoj1208.宠物收养所(splay)

有一些小猫和领养者,他们都有一个特征值 a,领养者想领走与他的特征值最相似的小猫(即他们差的绝对值最小的),而小猫也愿意和其特征值最相似的人走,如果有相似度相同的,选择靠前的人或猫。问这些差的最小值是多少。和 bzoj1588 一样,只多了一个产出操作#include #include using namespace std;const int MAX_N = 80005,

2015-12-29 10:10:50 516

原创 bzoj1588.营业额统计(splay)

给一个序列,对于每个数,找出在他前面的与他相差最小的数,把他们的差求和splay 模版,还可以用set 搞一搞,因为是在练 splay,就不写 set 的了。#include #include using namespace std;const int MAX_N = 50005;int tr[MAX_N][2], val[MAX_N], f[MAX_N];int n,

2015-12-29 09:02:34 585

原创 POJ1364.King(差分约束系统)

有一个长度为 n 的序列,有m 个关系:每次给你三个数 a, b, k,和一个符号 δ (或者 > ) 来表示 ∑Xi (a 或者∑Xi (a k,问存不存在满足这 m 个关系的序列。首先我们来观察这些关系,∑Xi (a 可以用前缀和来表示:sum[ b ] - sum[ a - 1 ]。那么关系式就变成了sum[ b ] - sum[ a - 1 ] > k,sum[

2015-12-13 20:31:33 317

转载 国家集训队论文

组合数学计数与统计2001 - 符文杰:《Pólya原理及其应用》2003 - 许智磊:《浅谈补集转化思想在统计问题中的应用》2007 - 周冬:《生成树的计数及其应用》2008 - 陈瑜希《Pólya计数法的应用》数位问题2009 - 高逸涵《数位计数问题解法研究》2009 - 刘聪《浅谈数位类统计问题》动态统计2004 - 薛矛:《解决动态统计问题的两把

2015-12-11 11:42:26 587

原创 关于splay

先留个坑,关于一些 splay 的论文与题目[HNOI2002]营业额统计[NOI2004]郁闷的出纳员[HNOI2004]宠物收养所 POJ3468hdu 1890hdu 3487hdu 3436spoj 4487 NOI2005 维修数列

2015-12-11 11:37:42 410

原创 spoj61.Brackets(线段树)

维护一个长度为 N 的小括号序列,实现两个操作:①将第i 个位置的括号取反;②测试当前序列是否合法。线段树维护两个变量:①区间内没有匹配的左括号数;②区间内没有匹配的右括号数。当这个区间的这两个变量都为0 时序列合法。/*Author: JDDPROG: spoj61.BracketsDATE: 2015.12.07*/#include #include usin

2015-12-07 15:32:59 413

原创 uoj128/bzoj4196/NOI2015.软件包管理器(树链剖分)

有 n 个软件,他们之间有n - 1 种依赖关系:假如 A 依赖 B,那么安装 A 之前必须先安装 B, 卸载 B 之前必须先卸载 A。现在有m 条操作,每个会卸载或者安装一个软件,你的任务是对于每次操作,求出这个操作实际改变了几个软件的状态,即从未安装变为安装,或从安装变为未安装。首先显然的是,软件之间的依赖关系构成了一颗树,每个节点的安装操作只和它的祖先有关,假如用01 表

2015-12-04 09:14:48 429

原创 欧拉这个函数

1).开始的练习①bzoj2190.仪仗队有一个整齐的 n * n的方阵,现在站在左下角看这个方阵,最多能看到几个人我们想一下如果把这个正方形沿 y = x 这条线分开,分成两个三角形,这两个三角形上的可以看到的点是完全相同的,其实就是找横纵坐标互质的点,即求出∑ψ( 1 ) ~ ψ( n ) 就是一个三角形上的可以看到的点,再把答案乘以 2,但是对角线上的那个点被计算了两

2015-11-24 08:16:15 397

原创 vijos1144.小胖守皇宫(树形DP)

一棵树有 N 个节点,现在需要将所有节点都看守住,如果我们选择了节点 i,那么节点 i 本身,节点 i 的父亲和儿子都会被看守住,每个节点有一个选择代价,求完成任务所需要的最小的代价。显然这是一道树形DP。根据每个节点其实有只有三个状态:①被自己看守;②被儿子看守;③被父亲看守。我们设这三种状态分别为 F1,F2,F3。当然最终作为答案的根节点没有父亲就从 F1,F2里面选小的。接下来我们

2015-11-20 10:05:36 1509 1

原创 小小的模线性方程(组)

1).poj1006.生理周期已知四个数 p, e, i, d,求一个数a,满足 a % 23 = p,a % 28 = e,a % 33 = i,输出 a - d。特别地,a 不能超过 21252。因为 23,28,33 两两互质,所以这道题就是中国剩余定理。#include using namespace std;typedef long long LL;LL

2015-11-20 07:42:05 369

原创 简单的欧几里德与扩展欧几里德

1).扩展欧几里德的起手题——NOIP2012.同余方程其实就是模版。

2015-11-19 10:55:49 419

原创 UVA-OJ.关于数论的成长练习

1). UVA11582.Colossal Fibonacci Numbers! 求斐波那契数列第 ( a ^ b ) 项模 N 的值。斐波那契数列在模 N 的情况下会有循环节,也就是说当出现连续两项分别等于 F[ 0 ],F[ 1 ] 的时候我们就找到了循环节 T,所以循环节 T 一定在 N ^ 2 的长度内出现。因为 N 比较小,就可以先求出 F[ 1 ] ... F[ N ^ 2 ]

2015-11-18 16:21:46 449

原创 poj3696.The Luckiest number (阶 && 欧拉函数 && 欧几里德)

给定一个正整数 L ,问至少多少个 8 连在一起组成的正整数可以是 L 的倍数N 个 8 组成的自然数是 (10 ^ N - 1) / 9 * 8。原题即为求最小的 N 满足 (10 ^ N - 1) / 9 * 8 = k * L。设 t = gcd(L, 8)。上式即为8(10 ^ N - 1 ) /  t = 9kL。显然 8/t, 9L/t 都是整数,且 gcd(8

2015-11-17 20:43:13 462

原创 usaco.section1.5 && 2.1

(section1.5) SuperPrime Rib找出N 位的特殊质数,如 7331 就是一个特殊质数,因为 7331 是质数,733 是质数,73 和7 也是质数,按升序输出算法1:通过打表观察, 1 位的质数只有 2,3,5,7,而后面的只能在末尾添加 1,3,7,9这几个数。所以我们先确定 1 位的,然后 DFS 后面的,每次 O( sqrt(n) ) 判

2015-11-13 09:04:55 355

原创 bzoj1787.紧急集合(倍增LCA)

有一棵树有 N 个结点,共有M 次查询,每次询问树上三个点到树上哪个点汇合距离最近,输出这个汇合点和最短距离倍增 LCA,每次询问两两求LCA ,三个 LCA 深度最深的点是集合点。#include #include using namespace std;const int MAX_N = 500005;struct node{ int v, w, next;}

2015-11-12 16:24:10 929

原创 bzoj1088.扫雷Mine (模拟 || DP)

像经常玩的扫雷有一样,只不过场地变成了 n * 2 的,且保证第二列没有雷,现在告诉你第二列的数字,求合法的方案数感觉自己智商没救了,只想着怎么 DP,怎么转移,竟然没有发现如果前两个确定了整个的就都确定了这个简洁优美的性质!!这样只用枚举前两个是什么就可以了啊!另外我真的看不懂劼老司机的 DP 是怎么做到的,各位也可以去看看,大神们懂了求教我。#include #include

2015-11-12 11:40:54 422

原创 bzoj1022.小约翰的游戏John(博弈论 NIM游戏)

有 n 堆石子,每次可以在任意一堆中取 1 个 或若干个或把这一堆全部取完,但是不能一个不取,先取完算输,问先手获胜还是后手获胜膜 DZY 大神:http://dzy493941464.is-programmer.com/posts/39629.html#include using namespace std;int n, x;int main(){ int T; sc

2015-11-12 10:07:53 492

原创 usaco.section1.4 && 1.5(2015.11.12)

(usaco.sectiorn1.4)Mother‘s Milk有 A, B, C 三个桶,每个桶有一定的容量,起初A, B 中没有任何东西,而 C 中装满了牛奶。可以将 C 中的奶倒入A 或 B 中,要么把被倒桶装满,要么把倒入桶倒完,问当 A 中为空时,C中可能有多少牛奶。直接暴力搜索#include #include using namespace std;

2015-11-12 08:41:29 463

原创 bzoj1003.物流运输(最短路 && DP)

有 M 个点、 e 条边的无向图,要走 N 次,每次一次都有一些点因为各种原因而不能走,所以不得不改变线路,每次改变线路的花费K,而总代价 = 每次走的路径长之和 + 改变线路的次数 * K, 最小化这个总花费。因为数据比较小,枚举计算 g[ i ][ j ] 代表从第 i 次 到第 j 次,不经过任何这几次不能用的点( 只要不能用过就算)的最短路,这个可用spfa 求之。

2015-11-11 20:46:26 641

博弈论——取石子游戏

通过取石子游戏,基本认识理解博弈,掌握基本模型和解题思路

2015-11-02

空空如也

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

TA关注的人

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