- 博客(38)
- 收藏
- 关注
原创 HNOI 2008 玩具装箱TOY 斜率优化dp
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。P教授有编号为1…N的N件玩具,第i件玩具经过 压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。同时如果一个一维容 器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,
2017-04-04 21:32:34
730
原创 SCOI 2012 喵星球上的点名 后缀数组+莫队
Descriptiona180285幸运地被选做了地球到喵星球的留学生。他发现喵星人在上课前的点名现象非常有趣。 假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成。喵星球上的老师会选择M个串来点名,每次读出一个串的时候,如果这个串是一个喵星人的姓或名的子串,那么这个喵星人就必须答到。 然而,由于喵星人的字码过于古怪,以至于不能用ASCII码来表示。为了方便描述,a180285决定用数串
2017-04-03 23:30:19
494
原创 JSOI 2008 火星人prefix Splay+hash
Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀。比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 11 字符 m a d a m i m a d a m 现在,火星人定义了一个函数LCQ(x, y),表示:该字符串中第x个字符开始的字串,与该字符串中第y个字符开始
2017-04-01 09:44:17
265
原创 NOI 2011 阿狸的打字机 AC自动机
Description阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机。打字机上只有28个按键,分别印有26个小写英文字母和'B'、'P'两个字母。经阿狸研究发现,这个打字机是这样工作的:l 输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母加在凹槽的最后)。l 按一下印有'B'的按键,打字机凹槽中最后一个字母会消失。l 按一下印有'P'的按
2017-03-31 21:02:37
408
原创 ZJOI 2011 最小割 分治
Description小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中,则称这个划分是关于s,t的割。 对于带权图来说,将所有顶点处在不同部分的边的权值相加所得到的值定义为这个割的容量,而s,t的最小割指的是在关于s,t的割中容量最小的割” 现给定一张无向图,小白
2017-02-07 21:30:44
424
原创 ZJOI 2010 贪吃的老鼠 网络流
奶酪店里最近出现了m只老鼠!它们的目标就是把生产出来的所有奶酪都吃掉。奶酪店中一天会生产n块奶酪,其中第i块的大小为pi,会在第ri秒被生产出来,并且必须在第di秒之前将它吃掉。第j只老鼠吃奶酪的速度为sj,因此如果它单独吃完第i快奶酪所需的时间为pi/sj。老鼠们吃奶酪的习惯很独特,具体来说:(1) 在任一时刻,一只老鼠最多可以吃一块奶酪;(2) 在任一时刻,一块奶酪最多被一只老鼠吃。由于奶酪的保
2017-02-02 16:56:00
867
3
原创 NOI 2016 优秀的拆分 后缀数组
如果一个字符串可以被拆分为 AABB 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的。例如,对于字符串 aabaabaa,如果令 A=aab,B=a,我们就找到了这个字符串拆分成 AABB的一种方式。一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分。比如我们令 A=a,B=baa,也可以用 AABB表示出上述字符串;但是,字符串 abaabaa 就没有
2017-01-24 14:10:06
550
1
原创 NOI 2015 寿司晚宴 状压DP
为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴。小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴。在晚宴上,主办方为大家提供了n−1n−1种不同的寿司,编号1,2,3,⋯,n−11,2,3,⋯,n-1,其中第种寿司的美味度为i+1i+1(即寿司的美味度为从22到nn)。现在小G和小W希望每人选一些寿司种类来品尝,他们规定一种品尝方案为不和谐的当且仅当:小G品尝的寿司种类中存在一种美味
2017-01-21 17:02:03
343
2
原创 NOI 2015 品酒大会 后缀数组
一年一度的“幻影阁夏日品酒大会”隆重开幕了。大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加。在大会的晚餐上,调酒师 Rainbow 调制了 n 杯鸡尾酒。这 n 杯鸡尾酒排成一行,其中第 n 杯酒 (1 ≤ i ≤ n) 被贴上了一个标签si,每个标签都是 26 个小写 英文字母之一。设 str(l, r)表示第 l 杯酒到第 r 杯酒的
2017-01-19 19:59:10
315
1
原创 SDOI 2011 染色 树链剖分
题意:给定一棵有n个节点的无根树和m个操作,操作有2类:1)将节点a到节点b路径上所有点都染成颜色c; 2)询问节点a到节点n路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。n, m <= 100000思路:树的形态没有改变,用树链剖分维护即可。在线段树上维护区间内的颜色前缀,后缀以及颜色段数构成一个三元组(pre,suf,tot),则
2017-01-18 19:28:16
249
原创 NOI 2014 魔法森林 LCT
为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为 1…n,边标号为1…m。初始时小E同学在1 号节点,隐士则住在 n 号节点。小E需要通过这一片魔法森林,才能够拜访到隐士。魔法森林中居住了一些妖怪。每当有人经过一条边的时候,这条边上的妖怪就会对其发起攻击。幸运的是,在 1 号节点住着
2017-01-17 21:28:02
264
原创 UOJ164 V 线段树历史查询
题目:第一行两个数:n,m。接下来一行 n 个数,第 i个数表示初始时第i个水箱内有ai m3的水。接下来 m 行中,第 i行第一个数ti表示操作类型:若 ti=1,则接下来三个整数li,ri,xi,表示打开编号在[li,ri]中的所有水箱的上方接口xixi 秒。若 ti=2,则接下来三个整数li,ri,xi,表示打开编号在[li,ri]中的所有水箱的下方接口xixi 秒。若 ti=3,则接下来三个
2017-01-15 20:46:41
652
1
原创 ZJOI 2009 狼和羊的故事 网络流
题目:“狼爱上羊啊爱的疯狂,谁让他们真爱了一场;狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈可以看作一个n*m个矩阵格子,这个矩阵的边缘已经装上了篱笆。可是Drake很快发现狼再怎么也是狼,它们总是对羊垂涎三尺,那首歌只不过是一个动人的传说而已。所以Orez决定在羊狼圈中再加入一些篱笆,还是
2017-01-12 19:05:11
551
4
原创 ZJOI 2009 对称的正方形 ST+Manacher
题目:Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究。最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵。通过观察,Orez发现这些数据蕴涵了一个奇特的数,就是矩阵中上下对称且左右对称的正方形子矩阵的个数。 Orez自然很想知道这个数是多少,可是矩阵太大,无法去数。只能请你编个程序来计算出这个数。简要思路:首先在数之间加上0,矩阵变为(n*2-1)
2017-01-12 11:53:11
611
原创 ZJOI 2009 取石子游戏 博弈论
题目:在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排。游戏由两个人进行,两人轮流操作,每次操作者都可以从最左或最右的一堆中取出若干颗石子,可以将那一堆全部取掉,但不能不取,不能操作的人就输了。 Orez问:对于任意给出一个初始一个局面,是否存在先手必胜策略。思路:看到题毫无思路,难以找到获胜策略,看了
2017-01-06 21:47:07
3473
1
原创 WC2016 挑战NPC 一般图匹配
题目:有 n 个球,用整数 1 到 n 编号。还有 m 个筐子,用整数 1 到 m 编号。每个筐子最多能装 3 个球。每个球只能放进特定的筐子中。具体有 e 个条件,第 i 个条件用两个整数 vi 和 ui 描述,表示编号为 vi 的球可以放进编号为 ui 的筐子中。每个球都必须放
2016-12-28 22:19:19
822
4
原创 ZJOI 2008 瞭望塔 半平面交
题意:给出一个以n个点为轮廓的村庄,在村庄任意位置放一个瞭望塔,使瞭望塔能看到村庄的所有位置,求瞭望塔最低高度。思路:考虑轮廓的每一条边,要看到这条边就必须在这条边以上的一个半平面内,因此求半平面交即可,样例图:不妨将半平面交与地面上的直线看成分段函数,分别为f(x)与g(x),则所求即为h(x) = f(x) - g(x)的最小值,由于f(x)与g(x)均为一次分段函
2016-12-24 19:28:30
269
原创 ZJOI 2008 Antbuster 巨型模拟
还是第一次做这么恶心的,断断续续调了一个星期。来盘点一下错误:1)求点到线段距离时利用点积判断,大小于号打反了;2)没有考虑上一秒的点不能再走回去;3)所有炮塔同时攻击,即使目标血量为负数;4)一开始没有注意精度问题;5)当该蚂蚁不能走时,没有判断是否能拿起蛋糕,并更新其上一步的位置;6)还有很多......以后写这种模拟一定要一步一步按题目描述来,
2016-12-17 13:00:21
274
原创 POJ 3145 线段树
题意: 一个初始为空的序列,两种操作: 1)A x:将x加入序列尾 2)B x :查询序列中的一个数A[i], 使 A[i] mod p最小的情况下, i最大, 输出i思路: 用线段树维护数值区间内的最小的数是多少。 1)对于较小的p可以直接暴力,由于数据较水可过。不过其实可以离线处理询问,对于较小的p每加一个数就更新其答案,p相同
2016-12-14 20:40:01
307
2
原创 ZJOI2012 network splay
题意:给出一个无向图,每条边都有一种颜色,每个点都有一个点权。要求支持修改点权,修改边的颜色,以及询问两点之间以某个颜色连接的路径上的点权最大值。保证不会出现同色边构成的环,每个节点都至多有两条某个颜色的路径和它相连。思路:每种颜色的边构成了若干条链,直接用splay维护序列点权最大值。修改边的颜色其实就是分裂和合并操作,只是合并时需要对树的形态进行讨论,可能需要记
2016-12-07 18:58:51
233
2
原创 POJ 3164 有向图的最小生成树
题意:给出n个点以及每个点的坐标,以及m条有向边(边权为两点距离),求一个最小生成树,使1号点可以到达其它所有点。思路:朱刘算法1)找出除根节点外其它点 i 的最小入边,将边权 in[i] 加入答案2)若找出的边不构成环,输出答案;若没有找到入边,无解3)否则将找到的环缩为一个点,重新设置其它边 i -> j 的权为 w[i][j] - in[j](相当与删去原来指向 j 的边,将
2016-10-13 21:33:01
572
原创 POJ 2989 Bron-Kerbosch算法 极大团数量
题意:给出n个人,其中m对朋友,求极大团数量(若超过1000则输出“Too many maximal sets of friends.”)。思路:1)定义:一个点集S被称为极大团,当且仅当S中的所有点均互为朋友,且所有不在S中的人,均与S中的某些人不是朋友。2)算法:Bron-Kerbosch算法(DFS)wiki上的伪代码,其中All是已经选的点集,Some是还未选的,None是
2016-10-12 21:42:19
2621
原创 POJ 1639 度限制最小生成树Prim
题意:给出n条无向带权边,求所有点的最小生成树,其中“Park”的度数不超过最后输入的k,输入保证有解。思路:思路其实很好理解,分为几个步骤:1.当然将“Park”作为根节点,一开始先删掉它,则原图会分为m个连通分量,分别记录它们的最小生成树,并记录每个分量与根的最小边,于是我们得到了根度数为m时的最小生成树。若k 2.然后考虑将生成树上的一些边替换成与根相邻的边,若根与节点v有边连接
2016-10-12 00:17:40
839
原创 POJ 3621 SPFA
题意:给n个点的点权以及m条有向边,求图中一个 点权和与边权和之比 最大的环的 点权和与边权和之比。思路:与环有关的可以想到SPFA, 设点权为c,i到j的边权为w[i][j], 设答案为ans,点1~p依次连成所求环, 则, (c[1] + c[2] + ... + c[p]) / (w[1][2] + w[2][3]
2016-10-10 21:27:41
234
原创 POJ 3904 容斥原理
题意:给n个数,求它们能够组成的四元组(a, b, c, d)的个数,其中gcd(a, b, c, d) = 1。思路:容斥原理求出不满足要求的四元组个数, 比如若这n个数只有2,3,5三种质因数,设P[i]为n个数中有约数为i的数的个数,则不满足的个数为: C(P[2], 4) + C(P[3], 4) + C(P[5], 4) - C(P
2016-09-26 19:48:17
301
原创 POJ 1845 质因数分解+等比数列求和
题意:给出A,B,求A^B的所有约数之和思路:首先给A分解质因数,若A = C1 ^ e1 * ... * Cn ^ en,则A ^ B = C1 ^ (e1 * B) * ... * Cn ^ (en * B), 容易知道,其所有约数之和为: Ans = [C1 ^ 0 + C1 ^ 1 + ... + C1 ^ (e1 * B)] * [C2
2016-09-25 21:43:05
484
3
原创 POJ 3612 DP
题意:给出n根电线杆的高度和参数C,农夫约翰要在电线杆之间搭电话线,相邻两根电线杆搭线的花费为|h[i] - h[i+1]| * C, 现可以将电线杆抬高,抬高的的花费为x * x,其中x为抬高的高度。思路:设dp[i][j]为前i根电线杆,第i根高度为j时的最小花费,则易得转移方程: dp[i][j] = min{dp[i-1][k] + C *|j - k| +
2016-09-16 18:42:35
535
原创 POJ1811 PrimeTest Miller-Robin+Pollard-Rho
题意:T个数,若为素数则输出Prime,否则输出其最小的质因子。 思路: (1)素数判定(Miller-Robin): 根据费马小定理,有: a ^ (p - 1) % p = 1; 其中p为素数,0 < a < p。 于是我们随机生成a,验证p是否满足条件即可,为了尽量减少错误概率,可以生成多个不同的a。 (2)质因数分解(Pollard-Rh
2016-09-15 16:05:11
354
原创 反素数 TIMUS 1748
题意:给出n,求1—n中因子最多的数的最小值,即反素数思路:根据反素数分解质因数后,质因子越小,其对应指数越大的性质,直接DFS即可#include #include #include #include #define For(i,j,k) for(int i = j;i <= k;i ++)using namespace std;const int P[20] = {2,
2016-09-05 21:08:31
261
原创 POJ 3463 Dijkstra 次小生成树及数量
题意:T组数据,每组数据给一个有向图,以及起点和终点,求从起点到终点的最短路个数,加上长度为(最短路长度+1)的路径条数。思路:Dijkstra cnt[i][0] 表示到第i个节点的最短路条数, d[i][0] 表示其长度 cnt[i][1]表示次短路条数,d[i][1] 表示其长度 实现与基本Dijkstra类似
2016-09-05 20:18:54
239
原创 POJ 2449 A*k短路
题意:给出一个有向图,起点终点以及k,求k短路思路:使用A*算法,首先预处理出每个点到终点的距离h[i],搜索时使用优先队列,关键字为(f + h[i]),其中f 是已经走的距离,i是当前走到的节点注意:此题坑点巨多:1)起点可能与终点相同,此时0不算最短路,故k++2)k短路不存在时,输出-13)由于是有向图,从Dijkstra时只能用反边,A*时只能用正边,否则MLE
2016-09-03 16:20:20
368
原创 POJ 2831 Prim
题意:给出一个n点m边的无向带权图,以及q个询问,每个询问查询当第i条边的权值改为x时,第i条边是否在该图的最小生成树(可能不唯一)之中。 思路:用Prim在n*n时间内求出最小生成树,并用Max[i][j]记录最小生成树上从i到j之间的边的权值最大值,每次询问只需判断两个节点之间边权最大值是否大于等于输入的x,若是则可以用这条修改过的边代替那条权值最大的边,输出Yes。注意可能有重边。 代码:
2016-08-30 21:00:52
316
原创 递推+矩阵快速幂
由于长度为一的方块只有一种方案,长度为二的有四种方案(不包含长度为一中的情况),长度为三的有两种方案(不包含长度为二中的情况),得递推式: f[i] = f[i-1] + f[i-2] * 4 + f[i-3] * 2; 由于n <= 10 ^ 18, 考虑使用矩阵快速幂,用如下矩阵存状态: f[i], 0, 0 f[i+1], 0, 0 f[i+2
2016-08-28 20:54:53
482
2
原创 DBFS POJ1198 Solitaire
题意:给出一个初始局面和目标局面,每个局面有四个棋子,每进行一步操作可以将一个棋子向四个方向走一格,如果某个方向已经有与它相邻的棋子,则可以跳过这个棋子到下一个空格,求能否在8步之内得到目标局面。思路:压缩状态判重,注意棋子是无序的#include #include #include #include #include #include #define For(i,j,k) f
2016-08-27 21:01:07
482
2
原创 IDA* POJ2331 Water pipe
题意:给出起点与终点,以及k种水管的长度及其数量,求消耗的最少水管从起点修到终点思路:首先在假设水管无限多的情况下分别求出横纵坐标到终点的最少步数,然后迭代加深搜索+剪枝即可#include #include #include #include #include #include #define For(i,j,k) for(int i = j;i <= k;i ++)co
2016-08-27 20:16:29
537
2
原创 HNOI 2010 弹飞绵羊LCT
blog.csdn.net/frods动态树要求我们维护一个由若干棵子结点无序的有根树组成的森林。 要求这个数据结构支持对树的分割,合并,对某个点到它的根的路径的某些操作, 以及对某个点的子树进行的某些操作。其中解决问题使用最多的是LCT,这里就主要介绍一下LCT吧。其实动态树主题思想跟树链剖分差不多,非常频繁的使用了Splay。类似树链剖分的定义: PreferredChil
2016-08-27 17:19:07
477
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人