
ACM 数据结构
文章平均质量分 77
tmeteorj
你若想得到这世间最好的,得先让这世界看到最好的你。
展开
-
POJ 2482
题意:二维平面很多星星,每个星星有亮度,给个矩形框,要求装进去的最大亮度之和(题目图片上面n长的英语表白模板是亮点)题解:扫描线+区间最大值,不过应该还有更快的方法吧,或者就是写怂了..注意虽然题目给的数据是在int范围内的,但是加上h后可能会超,所以嫌麻烦就全用long long好了。#include#include#includeusing namespace std;st原创 2012-08-20 11:16:20 · 971 阅读 · 0 评论 -
POJ 1572 Automatic Editing
题意:对一个字符串进行n次操作,每次操作为将字符串中相应子串a转换为子串b,从最左开始进行,每次转换之后又从左开始,直至没有相应子串a题解:KMP,需要对next数组有一定认识,每次找到子串之后将其替换,然后模式串的匹配位置变到匹配串被替换位置之前一位就行了。#include#include#includeusing namespace std;int next[100];cha原创 2013-05-14 10:14:27 · 836 阅读 · 0 评论 -
POJ 2443 Set Operation
题意:n个集合(集合中元素可以相同),每个集合c[i]个元素,q次询问,每次问是否存在一个集合含有x,y两个数。集合中元素取值为[1,10000]题解:对每个数建立它出现过的集合所对应的状态,用二进制表示,1代表出现在了当前集合,0代表没有出现。那么看一个数出现过的集合就可以用2^n的一个数表示,由于这个数很大(n#include#include#includeusing names原创 2013-05-17 09:34:35 · 1071 阅读 · 0 评论 -
POJ 1436 Horizontally Visible Segments
题意:给定n条竖直的线段,求有多少个三元组,使得这三条线段两两可见(可见的定义为这两条线段可以连一条水平线段而不与任意其他线段相交)题解:将线段按照x坐标排序,判断两个线段是否可见,就是将后一个线段向左投影能够在第一个线段上留下阴影。用线段树代表某个区间当前阴影代表谁,处理新线段即给那段区间赋值,并记录会覆盖哪些值就行。因为要考虑阴影投射在非整数点,且线段y坐标都是整数,所以线段树的大小要乘二原创 2013-04-08 16:09:10 · 1649 阅读 · 0 评论 -
POJ 2373 Dividing the Path
题意:长度为L的区间,有N头牛有各自喜欢活动的区间(Si,Ei),喷水的喷头只能安装在整数点上,且它能喷到的半径在[A,B]之间,现在要求:用最少的喷水头不交叉的覆盖整个L,并且满足每头牛喜欢活动的区间里只有一个喷头再喷。题解:线段树优化DP,dp[i]代表喷完前i个地方所需要的最少喷头数,那么dp[i]=min(dp[j]+1),i-2b#include#include#includ原创 2013-03-25 16:50:21 · 2466 阅读 · 2 评论 -
POJ 3167 Cow Patterns
题意:给定长度为n和m的两个数字序列(数均小于等于25),用m去按照一定方式去匹配n,即:如果n中的区间[a,b]各数字的名次与m中各数字的名次完全一样,那么他们就是匹配的。问题:求所有的匹配个数及他们出现的首位置。题解:KMP的升级版,对KMP有一定了解后做这道题就比较容易了,由于区间不同后,名次就不同了,统计名次也比较麻烦,所以对于区间[a,b]中的一个数的名次,可以对应为这个数之前比它小原创 2013-03-19 20:08:58 · 3351 阅读 · 0 评论 -
POJ 3437 Tree Grafting
题意:给出一个树的中序遍历的上下情况,求这棵树的高度以及它转化为二叉树后的高度。题解:直接求树的高度比较简单,和求区间最大深度的算法一样,就是统计一下就行了;求二叉树的话,实际上这道题说了最多1w个结点,所以可以直接建一棵树,然后再深搜树形DP就行了。#include#include#includeusing namespace std;const int N=10000;cha原创 2013-04-01 17:04:20 · 1976 阅读 · 0 评论 -
POJ 2351 Time Zones
题意:给出一个时区当前时间,求另一个时区当前时间。题解:模拟,用好数据结构储存时间就行了。#include#include#include#includeusing namespace std;struct Data{ int h,m; Data(int _h,int _m){h=_h;m=_m;} Data(){};};struct Zone{原创 2013-03-11 17:35:06 · 1074 阅读 · 0 评论 -
POJ 2763
题意:给定一棵含n个结点的树,共有q次操作,分为两种0 c :求从位置s到c的距离,然后s变成c1 a b:把第a条边的权值变为bn题解:求树中两点距离显然是LCA,关于对原树中边权的修改,假设改了(a,b)使得其边增大了c,那么如果a是b的父亲,那么以b为子树的所有结点到根的距离都将增加c。求解LCA可以得到dfs序列,记录下每个结点初始访问时间以及最后访问时间,那么如果以该节点原创 2013-01-19 19:26:29 · 1933 阅读 · 1 评论 -
POJ 3580
题意:给一个数组,有6种操作:add x y d : [x,y]中所有数加dreverse x y:[x,y]区间翻转revolve x y t:[x,y]循环右移t位,t可取任意整数insert x v:在第x个位置插入一个值为v的数delete x : 删除第x个数min x y : 求区间[x,y]的最小值题解:典型splay,通过旋转原创 2012-08-19 13:16:20 · 1637 阅读 · 0 评论 -
HDOJ 4582 DFS spanning tree
题意:n个点,m条边的无向图,通过DFS遍历,m条边中前面的n-1条边形成深度优先生成树,后面的自然就是形成环(没有自环)。问从DFS生成树中最少选择多少边,能够使得所有的环都至少有一条边在你选择的集合中。题解:考虑DFS生成树,必然没有横叉边(即一个孩子都另一个孩子的边,要不DFS就应该遍历过去),所有的环都是一个结点与它祖先结点的边形成的。那么这题做法就是进行一次DFS遍历,在回溯原创 2013-08-12 08:29:19 · 2154 阅读 · 0 评论