自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AC_Arthur的专栏

Always challenge miracles!

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

原创 SGU 210. Beloved Sons(二分图匹配)

题目链接:点击打开链接思路:因为每一个左边的匹配点都有一个优先级, 所以我们按照左边的点的优先级排序, 这样就会优先匹配前面的点。 原因很简单 , 我们只要知道匈牙利算法是怎么进行的就可以了:  我们依次枚举每一个左边的点, 对于一个左边点x, 找到一个右边点y, 如果y没有被匹配, 那么(x, y)就是一对新匹配, 如果y已经匹配了x`, 那么我们尝试为x`重新找一个匹配点, 如果找到了那么

2016-06-07 22:31:10 1701

原创 UVA 1475 - Jungle Outpost(二分 + 半平面交)

题目链接:点击打开链接思路:首先,我们要知道一个贪心结论:敌人如果有k个炸弹, 那么他一定是炸连续的k个点, 这样会使得炸的面积最大。  那么我们只要二分炸弹数mid,每隔mid个点重新建立一个平面, 仍然是n个平面, 代表n种可能情况, 那么如果他们的交存在, 那么司令部只要放在这个平面交的面积内就行了。  所以问题迎刃而解, 二分答案, 用半平面交判断答案是否可行。细节参见代码:#

2016-05-21 22:19:59 3821

原创 UVA 1396 - Most Distant Point from the Sea(二分+半平面交)

题目链接:点击打开链接思路:半平面交模板题, 半平面交算法的函数中, 第一个参数是n个平面的向量, 所以我们只需要二分答案m,然后把每个向量向中心方向平移m长度, 然后求半平面交, 如果交出来的面积为0, 则缩小m, 否则, 增大m。细节参见代码:#include #include #include #include #include #include #include

2016-05-20 14:16:35 903

原创 UVA 10652 - Board Wrapping(二维凸包)

题目链接:点击打开链接思路:求面积最小的凸多边形把所有箱子围起来, 这不就是凸包的定义吗。 模板题。细节参见代码:#include #include #include #include #include #include #include #include #include #include #include #include #include #includ

2016-05-19 21:14:31 3669

原创 UVA 11324 - The Largest Clique(SCC缩点 + DP)

题目链接:点击打开链接思路:如果没有环, 该题就是DAG上最长路, 现在有环, 我们把强连通分量缩点, 那么缩点之后的图就是一个DAG, 可以用DP求解, 用d[i]表示以i结尾的最长路距离。细节参见代码:#include #include #include #include #include #include #include #include #include #

2016-05-18 22:09:31 2893

原创 HDU 3836 Equivalent Sets(强连通分量)

题目链接:点击打开链接思路:强连通分量模板题, 把一个强连通分量的缩成一个点, 构建一张新图。 然后在新图上, 求每个点的入度和出度。 假设有a个顶点的入度为0,b个顶点的出度为0,那么可以证明答案就是max(a, b)。  可以这么想, 入度为0的点肯定要练到出度为0的点。细节参见代码:#include #include #include #include #include

2016-05-17 20:57:05 3308

原创 ZOJ 2112 Dynamic Rankings(线段树套treap求动态第K大)

题目链接:点击打开链接思路:我们都知道, treap可以维护整个区间内的数的大小关系, 那么我们在线段树的每个节点上建一棵treap, 那么对于一个n个数的每一个数, 他都会经历logn个结点,所以总的结点数是n * logn。 然后二分答案ans, 询问区间内一个防止超内存的黑科技:开一个数组做内存池。细节参见代码:#include #include #include #i

2016-05-16 17:04:22 3135

原创 POJ 1442 Black Box(treap树指针实现)

题目链接:点击打开链接思路:本来不想用指针实现的, 但是在做动态第K小的题目时发现, 如果不用动态申请内存的方式, 数组根本开不下。思路和静态数组模拟是一样的。细节参见代码:#include #include #include #include #include #include #include #include #include #include #incl

2016-05-15 21:58:15 1311

原创 POJ 1442 Black Box(treap树)

题目链接:点击打开链接思路:treap树模板题, 可以动态维护一个有序表, 支持在O(logN)的时间内完成插入、删除一个元素和查找第K大元素的任务。 当然, treap树能做到的还远远不止这些, 常常与其他数据结构嵌套。treap树是一种平衡二叉搜索树, 既满足堆的条件, 又满足排序二叉树的条件。细节参见代码:#include #include #include #incl

2016-05-13 20:22:31 4267

原创 POJ 2104 K-th Number(主席树)

题目链接:点击打开链接细节参见代码:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define Max(a,b) ((a)>(b)?(a

2016-05-12 22:29:18 3981

原创 UVA 10869 - Brownie Points II(树状数组+离散化)

题目链接:点击打开链接思路:统计区间和, 我们想到了树状数组, 离散化后, 枚举第一个人选取的x坐标, 用两个树状数组,以y坐标为下标建树, 一个表示当前左边的情况, 一个表示右边的情况, 再枚举当前垂直线上的每个点, 可以用树状数组快速统计结果, 该题题意挺难理解的, 要求输出第一个人的最小得分的最大值ans, 还有就是当第一个人取ans时第二个人的可能得分。细节参见代码:#incl

2016-05-10 16:47:41 919

原创 UVA 501 - Black Box(二分 + 树状数组 + 离散化)

题目链接:点击打开链接思路: 该题虽然是求区间第k小, 但是实际上是不需要用到复杂的数据结构的, 我们只需要用树状数组来维护就行了, 因为以值作为树状数组下标, 那么这就是一个天然的单调区间, 用二分来查找就行了。  另外就是要离散化一下。细节参见代码:#include #include #include #include #include #include #includ

2016-04-30 17:12:51 3691

原创 UVA 11997 - K Smallest Sums(多路归并)

题目链接:点击打开链接思路:多路归并。 用贪心的规则, 我们先考虑两个数组的情况, 如果将两个数组从小到大排序, 那么我们先将数组a的所有元素加上数组b的最小的元素, 然后放入优先队列。 因为是事先排好序的, 所以其中肯定有一个是最小的,那么当这个数取出来之后, 如何保证队列头上时次小的呢? 我们发现, a数组的所有元素都用上了, 而且是和b数组中最小的数相加得到的, 所以, 当a[0]+b[

2016-04-27 21:24:14 4083 2

原创 HDU 5673 Robot(卡特兰数)

题目链接:点击打开链接思路:卡特兰数可以用来求括号序列的个数, 用了组合数学的知识。 该题其实就等价于求一个括号序列的个数, 因为满足任意时刻, 向右的步数大于等于向左的步数。 但是该题还有停止不动的情况, 所以我们不妨枚举向右的步数, 然后求出括号序列的组合数, 然后剩下的就是停止不动的步数, 用组合数插空即可。 另外, 除法取模要取逆元, 我们可以线性预处理出所有逆元。细节参见代码:

2016-04-23 20:21:22 3532

原创 HDU 4249 A Famous Equation(数位DP)

题目链接:点击打开链接思路:用d[i][a][b][c][is]表示当前到了第i位, 三个数的i位分别是a,b,c, 是否有进位 , 的方法数。细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#include#includ

2016-04-21 15:11:34 1267

原创 HDU 4248 A Famous Stone Collector(DP + 组合数)

题目链接:点击打开链接思路:DP + 组合数。 用d[i][j]表示前第i种颜色的石头, 已经用了j个的方法数, 每次枚举第i种石头放多少个, 假设放k个, 那么相当于从j个位置中选k个, 预处理组合数就行了。细节参见代码:#include#include#include#include#include#include#include#include#include#

2016-04-20 21:37:12 1427

原创 HDU 2665 Kth number(划分树)

题目链接:点击打开链接思路:划分树模板题。细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define Max(a,b) ((a)>(b)?(a):(

2016-04-15 16:35:17 4386

原创 ZOJ 2334 Monkey King(左偏树)

题目链接:点击打开链接思路:左偏树模板题, 需要维护集合关系, 这个可以用并查集很方便的维护, 另外需要用一个数组来维护每个点所在的左偏树编号。细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#include#includ

2016-04-14 21:53:08 3812

原创 HDU 3047 Zjnu Stadium(带权并查集)

题目链接:点击打开链接思路:注意, 行数是无限的, 因此, 两个人可以同时都相距另一个人x远(相距x列, 不在同一行),也就是说, 出现矛盾的唯一地方就是在于, 现在说的两个人相距的距离和之前说的矛盾。   那么怎么判断矛盾呢, 由于每个人之间有间接关联性, 因此, 我们需要处理一个集合的距离问题 , 所以用带权并查集就可以很好的处理。细节参见代码:#include#include

2016-04-14 17:23:59 2843

原创 HDU 1281 棋盘游戏(二分图匹配)

题目链接:点击打开链接思路:经典二分图建图模型, 对于每一个格子, 按照行标建一列, 列标建一列, 然后进行匹配即可, 然后尝试删除每条边, 再进行匹配看看有没有比原匹配小。  复杂度显然会超时。。 数据水了吧。细节参见代码:#include#include#include#include#include#include#include#include#include

2016-04-13 17:36:16 3213

原创 POJ 3678 Katu Puzzle(2-SAT)

题目链接:点击打开链接思路:2-SAT基础题,  关键是要理解好模板的含义,然后重点在建图。在2-SAT中, 问题的关键是处理矛盾关系, 找到一个可行的解满足所有关系。  然后我们建图的时候, 连接一条有向边, 这条有向边可以理解成导出关系, a -> b。 那么我们可以由此来建立关系运算符, 以AND操作, 如果AND操作为真, 那么!a -> a, !b -> b, 代表, 如果a为假

2016-04-11 21:01:14 848

原创 HDU 4489 The King’s Ups and Downs(DP + 组合数)

题目链接:点击打开链接思路:我们不妨把n个人的身高设为1~n, 然后从低到高插入队列。 那么将第i个人插入队列的时候就出现了问题, 插入的这个位置需要满足前面两个是高低, 后面两个是低高。所以我们用DP来记录。 用d[i][0] 表示i个人的队列, 结尾为高低的方法数, d[i][1]表示开头为低高的方法数。  那么假设将第i个人插入, 插入的位置前面有j个人, 后面有i - 1 - j个

2016-04-11 16:44:28 1729 1

原创 HDU 4487 Maximum Random Walk(概率DP)

题目链接:点击打开链接思路:概率DP, 用d[i][j][k]表示第i步, 走到j点, 走过的最大值为k的概率。  然后最后用概率乘以最右边走到的点就是期望, 期望相加就是答案。细节参见代码:#include#include#include#include#include#include#include#include#include#include#inclu

2016-04-10 10:49:45 2607

原创 HDU 4283 You Are the One(区间DP)

题目链接:点击打开链接思路: 经典区间DP, 用区间d[l][r]表示, 当前[l, r]区间的最优解。  那么对于当前区间, 左端点的行为决定了状态的转移, 那么编号l的人是否进小黑屋, 第几个进小黑屋呢。  我们再用一重循环枚举, l是[l, r]区间中第几个出场的, 那么他前面有多少人,贡献就增加几个a[l]。 假设, 是第k个出场的, 那么答案需要累加上它前边的人的贡献:(k - l)

2016-04-08 20:09:29 2440

原创 POJ 2446 Chessboard(二分图匹配)

题目链接:点击打开链接题意:给你一个n*m的棋盘, 上面有一些洞洞,要求放置若干1*2的木板, 洞洞位置不能放置, 其他位置要全部覆盖, 任意一个格子不能同时覆盖两块木板, 求能否完全覆盖。思路:二分图匹配。 相邻两个格子, 行数 + 列数 一定是一个奇数一个偶数, 由此将格子分成两派, 匹配一些即可。  可以用最大流, 但是匈牙利算法更快, 而且代码短。细节参见代码:#inclu

2016-04-07 11:28:02 2507

原创 POJ 2513 Colored Sticks(hash + 欧拉道路)

题目链接:点击打开链接题意:n个木棍, 两端有颜色, 相同颜色可以链接, 问你最终能否形成一条线段。思路:典型的欧拉道路, 成立的条件是 1. 图联通 。 2. 度为奇数的点不能超过2个。 用map超时了, 可以用hash水过去。细节参见代码:#include#include#include#include#include#include#include#includ

2016-04-05 22:32:39 1554

原创 Ural 1057 Amount of Degrees(数位DP)

题目链接:点击打开链接题目大意:求给定区间[X,Y]中满足下列条件的整数个数:这个数恰好等于K个互不相等的B的整数次幂之和。例如,设X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意:17 = 2^4+2^0,       18 = 2^4+2^1,       20 = 2^4+2^2.1 ≤ X ≤ Y ≤ 2^31−1,1 ≤ K ≤ 20,  2 ≤ B ≤

2016-03-31 20:54:20 1165

原创 Codeforces Round #105 (Div. 2) (D. Bag of mice(概率DP))

题目链接:点击打开链接题意:原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠。谁先抓到白色老师谁就赢。 王妃每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来。 每次抓老鼠和跑出来的老鼠都是随机的。 如果两个人都没有抓到白色老鼠则龙赢。王妃先抓。 问王妃赢的概率。 思路:概率DP, 用d[a][b][id]表示当前还剩a只白鼠, b只黑鼠,

2016-03-30 21:09:43 982

原创 HDU 3853 LOOPS(概率DP)

题目链接:点击打开链接题意:求从(1, 1)点走到(n, m)点的花费能量的期望, 每次决策消耗2点能量。 每次可以原地不动或者向右或者向下, 分别有个概率。思路:运用全概率期望公式, d[i][j] = a[1]*d[i][j] + a[2]*d[i+1][j] + a[3]*d[i][j+1] + 2, 其中a[i]是三个可能情况的概率。  因为dp方程要满足无后效性, 所以移项得d[

2016-03-30 09:54:31 1101

原创 HDU 4405 Aeroplane chess(概率DP)

题目链接:点击打开链接题意:有一条长n的轴, 标有0~n, 从0开始掷色子, 骰子有1~6, 掷到几就向右走几步, 还有一些航线, 可以直接从一个点到另一个点。 求最终走到n的期望。思路:很显然的概率DP。 但是要求期望, 我们首先要知道一个公式:dp[i]=sum(dp[j])+1(i+1点击打开链接细节参见代码:#include#include#include#inclu

2016-03-29 19:57:27 994

原创 HDU 2836 Traversal(线段树+离散化+DP)

题目链接:点击打开链接题意:给你n个数的序列, 一个数h, 求相邻数之差不超过h的子序列的个数和 % 9901。思路:经典水题, 显然用d[i]表示以a[i]结尾的满足条件的子序列个数。  那么对于j = a[i] - h。  对于这个限制用线段树下标维护, 线段树用来维护d[i]的累加和。 细节参见代码: #include#include#include#include#

2016-03-29 17:38:08 1576

原创 HDU 2227 Find the nondecreasing subsequences(线段树+离散化+DP)

题目链接:点击打开链接题意:给你n个数, 求非递减子序列的个数。思路:很容易想到, 用d[i]表示, 以a[i]为最后一个元素的非减子序列个数。  那么每次转移, 就是sum(d[j]) (其中 j 那么最终答案是所有d[i] (1 细节参见代码:#include#include#include#include#include#include#include#in

2016-03-29 16:41:28 593

原创 POJ 3422 Kaka's Matrix Travels(拆点+最大流)

题目链接:点击打开链接题意:给一个nXn的矩阵, 每个点有一个值, 让你从(1,1)走到(n,n)走k次, 每次只能向右或者向下走, 走到一个数字, 就得到那个值, 并且这个地方走第二次的时候不会再次获得该值, 求能得到的最大值。思路:走k次这限制我们可以用流量来解决, 关键是费用问题, 解决方法是拆点 —— 解决结点容量或者费用的通法。细节参见代码:#include#inc

2016-03-24 16:28:24 1044

原创 POJ 3469 Dual Core CPU(最小割)

题目链接:点击打开链接题意:有n个模块要在A或B上运行, 费用分别是a[i]和b[i], 还有m个关系, 如果a[i]和b[i]不在同一个CPU上执行, 那么需要额外花费c[i]。 求最小花费。思路:首先, 很显然的是, 要把模块分成两个集合, 有一些属于A, 有一些属于B,这种将对象划分成两个集合的问题, 我们常用最小割来解决,  那么对于每个模块, 如果它属于A, 为了割断 , 要将他

2016-03-24 15:51:37 1534

原创 POJ 3680 Intervals(最小费用流)

题目链接:点击打开链接题意:n个区间, 每个区间有一个值, 让你选择若干区间, 使得没有一个点被覆盖超过k次的前提下的最大值。思路:我们可以把区间端点离散化然后跑费用流, 不超过k次, 我们可以把这个对应流量属性。  那么不难想到, 将区间端点作为结点, 连一条流量为1,费用为-a[i].c的边, 因为可以跳过一些点, 所以我们把每个相邻端点之间用流量INF,费用为0的边连接, 然后源点流

2016-03-24 14:53:56 1259

原创 HDU 2896 病毒侵袭(AC自动机)

题目链接:点击打开链接题意: 思路:模板题。细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define Max(a,b) ((a)>(b)?(a

2016-03-22 21:21:01 1142

原创 HDU 3065 病毒侵袭持续中(AC自动机)

题目链接:点击打开链接题意:求n个串在一个很长的串中出现的次数。思路: 典型的AC自动机模板题。细节参见代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#d

2016-03-22 20:46:11 1202

原创 HDU 4300 Clairewd’s message(KMP)

题目链接:点击打开链接题意:给你一个26个字母的转换表, 把'a'转换成第一个字母, 把'b'转换成第二个......以此类推。  第二行给你一个密文+明文的串, 并且明文有可能不完整, 让你求明文最小的可能解。   思路:思路不是很难想, 就是把密文转换成明文, 然后从中间开始对原串进行KMP, 直到最后一个字符时返回匹配的长度。  然后这个匹配的长度就是最短的明文长度。细节参见代码

2016-03-22 17:02:16 1050

原创 2016蓝桥杯省赛B组题解

今天第一次打蓝桥杯, 去水了一发, 其实蓝桥杯的题还是蛮水的。记得不是很清楚了, 我就口胡一下吧:有个题是撕邮票的, 本来可以用那个枚举全排列的函数next_permutation轻松搞定, 可是记忆力差的我哪能记得住, 而且坑爹的dev我找了半天也没发现代码补全, 差点连头文件都写不全。  不过还好我会二进制枚举子集, 如果出现了5个1, 就判断一下这5个格子是否相邻。   是否相邻很好

2016-03-20 21:24:28 4033 9

原创 HDU 4763 Theme Section(KMP)

题目链接:点击打开链接题意:给你一个字符串s, 要你求是否存在一个子串, 在s的前中后各出现一次。 求最大可能的子串长度。思路:KMP变形, 我们首先要了解KMP的运行机制。  核心是失配函数f, f[i]表示在i点失配之后返回到f[i]这个点, 且能保证f[i]之前的部分和模板串匹配。  这样的话, 我们就可以利用这个特点来处理该题了。 我们假设在最后一个字符处失配, 那么它将返回f[l

2016-03-18 21:24:28 1106

空空如也

空空如也

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

TA关注的人

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