- 博客(24)
- 收藏
- 关注
原创 HDU 5558 2015ICPC合肥站G题
题意:给一个字符串加密,加密规则为:对于第i个字符 如果存在S[T.....T+K-1] == S[i....i+K-1] 则输出T,K 如果有多种方法输出K最大的 如果有多种K最大的方法则输出T最小的。然后把i增加K如果不存在。则输出-1 和 第i个字符的ASCII码 并且把i增加1.解法:首先用后缀数组求出 sa rk 和 height
2015-12-09 20:33:59
728
原创 HDU 5556
题意: 有一个农场大小为n*m 里面有一些古老的农田,你现在需要新建一些农田,要求新建的农田之间不能相连,古老的农田不可拆分,如果你选择了一块土地(原为古老的农田)建立新农田则需要把该块古老的农田全部包含。解法: 如果没有古老的农田只要对所有空地和它相邻的空地建边,然后求一遍最大独立集即可。 所以我们需要移除古老的农田的影响,因为古老的农田最多只有10块,所以我们只需要枚举
2015-12-08 17:07:21
850
原创 重开优快云,POJ2104
1年多没写优快云了。。今天重新开始。向学霸取经, 知道了主席树的思路, 第一次写主席树 也不知道别人标准的代码是咋样的。。。写的比较搓,继续开坑#include #include #include #include #include #include #include #include #include #include #include
2015-09-22 15:21:31
438
原创 一些网络流。
POJ 3281 题意:每一头牛都有它喜欢吃的食物和饮料,问最多能满足多少头牛 让它吃到它喜欢吃的食物和饮料。 思路:从源点S对每一个食物连一条边,容量为1, 然后食物对喜欢吃这种食物的牛连边,容量也为1,然后每头牛连一条边到喜欢吃的饮料 容量也为1。 每个饮料连边到汇点,容量为1。 这样图构好了,但是每头牛可能会产生吃多个食物或者多个饮料的情况,所以对牛这个点也要
2014-07-15 15:12:00
757
原创 POJ 2446 二分图匹配
题意:给你一个n*m方格 让你用1*2的的小方格去铺满,其中有k个方格不能被铺到。 思路:二分图建图, 以每个格子为点建图,如果可以用一块1*2的小方格铺到,就连一条边。 每个格子在X集合和Y集合都有一个点,只要任意一边被匹配到了就算可以,然后就是二分图匹配了。 上代码。#include#include#include#include
2014-05-12 15:51:06
648
原创 POJ 2195 二分图最小权匹配KM算法
本来是打算昨天晚上写的, 昨天网速渣的连优快云都进不去,没办法 只能现在来写了先写写对KM算法的理解,KM算法是对每个点设置一个顶标,只有当边长等于两边点的顶标之和的时候才进行增广,这样就能保证得到的一定是最大权匹配。如果找不到匹配的时候就对交替路中X集合的顶标减少一个d Y集合的顶标增加一个d。这样两个点都在交替路中的时候x[i]+y[i]的和不边X在 Y不在的时候x[
2014-05-07 12:43:57
2313
1
原创 稳定婚姻问题
原题POJ 3487稳定婚姻问题的解法,男士主动,女士被动,每次找一个光棍的男士对他最满意的女士求婚,如果女士是未婚或者女士当前的未婚夫在女士心目中不如他,就把男士定为女士的未婚夫,一直进行循环。#include#include#include#include#include#define maxn 1000using namespace std;int pref[maxn]
2014-05-05 22:38:53
743
原创 二分图匹配
HDU 2063 求一个二分图的最大匹配。完全的裸题。贴代码。#include#include#include#include#includeusing namespace std;vector G[1005];bool check[1005];int mac[1005];int n;void add_edge(int from,int to){ G[f
2014-05-01 21:36:21
622
原创 POJ 3414
题意:两个杯子相互倒水问题。 可以把一个杯子倒满,或者把一个杯子倒空,或者把一个杯子中的水倒入另外一个杯子中直到自己为空或者另外一个杯子满了为止,最后输出倒法,思路:隐式图BFS,一样用一个二维数组标记状态,加一个RE数组标记是从哪个位置转移过来的。这样可以在最后进行路径还原。上代码。#include#include#include#includeusing
2014-03-25 20:36:04
393
原创 搜索专题之BFS
POJ 3278题意是一个农夫在一维空间内找一头奶牛,农夫的位置是x 奶牛的位置是y农夫每次可以走到x+1或x-1或者2*x;问最少需要多少次才可以找到奶牛。思路:水题,裸的一道BFS,唯一的坑就是数组开10W会RE。具体不多说,上代码#include#include#include#includeusing namespace std;int a[1000005
2014-03-24 22:19:34
905
1
原创 HDU 2602
完全的01背包。。 题意:有N个物品 大小为V的背包 然后每个物品的价值Vi 大小pi ;求 能拿走的最大的价值。。。 状态转移方程 f[v]=max(f[v],f[v-z[i]]+v[i]);贴上代码=。=#include#include#includeusing namespace std;long long val[1005]
2014-01-15 17:20:45
463
原创 HDU 1596
这题分类是分在最短路里面。。 结果我用最短路想了办法没有什么思路。。。 百度了一下。。发现是并查集。。。。题意:找到一条边权差值最小的路。 输出边权差。思路: 先把边按照边权排序。然后从第一条边开始加入并查集。 直到起点和终点同根为止。。求出边权差。然后以第二条。。。。直到最后一条。。贴上代码:#include#
2013-12-20 17:06:12
450
原创 HDU 2680
题意:一个人想去看他的朋友 , 他自己可以从N个位置出发。思路:这是一个多源单汇的最短路问题。 因为我还不会用FLOYD算法。。 所以只能用麻烦的dij算法了。 把多源单汇问题转化为单源多汇问题。 用dij搜一遍以终点为起点的最短路。然后从多个起点的最短路中找出一个最短的。如果没有就输出-1#include#include#include
2013-12-17 13:38:18
503
原创 HDU 1548
题意: 一个奇怪的电梯有N层。第i层都是只能上KI层或者下KI层。 如果如果i+ki大于N就不能执行。如果i-ki小于1 也无法执行。 这就是一个有向图。单源最短路问题。思路:把每一层能到达的层数读入到地图a[i][j]中。这样直接可以用算法解决#include#include#include#include#define INF 1000000using
2013-12-17 13:34:37
481
原创 HDU 1142
题意: 在一个森林中从办公室走到房子。 因为要在晚上之前回家 所以不能走比你自己的位置离终点的最短路还要长的点。 找出能走到终点的路的条数思路: 先从终点开始搜一遍最短路。 然后再从起点开始搜。 最短路比你自己这个点更短的才可以搜 挂上代码。#include#include#include#include#d
2013-12-12 15:11:53
519
原创 POJ 3667
题意: 一个旅馆有N个连续的空房间。。。 接下来一些操作 进来的旅客都需要有一些连续的空房间如果有则输出首个房间的位置。如果没有就输出0. 或者是在某个位置开始空出连续的一些房间。(房间原来就可以是空的) 思路: 首先建立线段树。。 每个区间要保存该区间内从左数的空房间数,lk,从右数的空房间数rk和最大空房间数mk
2013-12-02 18:32:22
609
原创 HDU 3911
在这题上我WA了无数次。。。。。。题意大概: 给你一个只包含1和0的长度为N的数列。。 然后有M个操作 每个操作前包含一个0或者1 然后是I J 如果是1就是把区间[i,j]内的所有0变成1所有1变成0 然后0就是询问区间[i,j]内最多有多少个连续的1思路:建立一个长度为n的结构体。结构体内要存 从前开始算有多少个0 有多少个
2013-11-28 21:25:30
530
原创 HDU 1394
题目意思: 给你一个数列。求他的逆序数。。。 当然这个数列是可以换的。。 他可以从a1,a2,a3....an换成a2,a3.....an,a1 他可以这样换n-1次。要你求最小的逆序数。数列里面的数在0-n-1之间思路: 建立一个0-n-1 的线段树。 每输入一个数就在相应的区间+1 并且统计比该数大的区间内的和。如此可以得出一个初始
2013-11-27 23:26:47
448
原创 POJ 2528
题意: 一块黑板 给你贴广告。。。后面贴的会把前面贴的给覆盖了(如果在同一个地方), 然后最后要你求还有多少广告是能被看到的。。 能被看到任何一点都算能看到。。。 这题难点也在于数据太大。。无法直接用暴力去做。。所以要用到离散。。。。。 每一个广告有2个端点。他最多有1W个广告。。。也就是说他最多只有2W个端点。所
2013-11-27 23:22:15
602
原创 HDU 2795
大概题意: 给你一个黑板。让你贴小广告,小广告要尽可能往上贴,又要尽可能往左贴。这题的难点就在于他给的数据比较大= =无法直接暴力的用线段树做。。因为那样绝对会MLE的= =所以这个时候注意到他的n的范围是只有20W。。。然后想一下。。最多只贴20W的小广告。所以他最多也只能贴到20W层。。也就是说他的高最多也只能是20W。所以建立线段树的时候就可以以1-min(
2013-11-27 23:13:30
430
原创 POJ 3468
这是一道线段树的区间更新问题。。。。。题意是给你一个N和Q。然后给你一个N的数列。和Q个操作或者询问。C a,b,c 就是在下标a-b之间的的数列的值+cQ a,b 就是询问下标a-b之间的数列的值得和我的思路:先建立线段树。。。每个区间存的值为改区间内所有值得和。如果操作C a,b,c 刚好覆盖到某个区间时。 不需要在更新下去。而是把c的值保存在lazy中。
2013-11-26 15:04:13
568
原创 HDU1754
又是一道线段树。。。题意大概是。有N个学生 每个学生都有一个成绩。然后他会更新某个学生的成绩或者是询问I到J个学生之间的最大成绩我的思路: 也是先建立线段树。每个区间保存的是该区间内的最大分数。更新的时候就只需要判断该值是否为最大值。如果是就更新。否则不更新。询问的时候也是老样子。搜索区间I J知道匹配到I J的子区间 就更新他的最大值= =
2013-11-25 13:36:12
493
原创 第一次写博客= = 题目= =HDU1166
刚开始学线段树。。。第一次做的线段树题目。。。 题目意思大概就是 有N个营地。 每个营地初始有多少人。 然后他会给你操作。 在某个营地上加或减多少人。。。。然后询问你I到J和营地共有多少人。。。。。我的思路: 一开始建立线段树。。。 然后在输入的时候把包含该营地的所有区间都加上该营地的值。。。 最后就是让所有的区间就
2013-11-25 13:29:22
695
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人