Start_数据结构
文章平均质量分 75
绝风
这个作者很懒,什么都没留下…
展开
-
POJ 3295 Tautology
如注释所见,前面定义了int pp,qq,rr,ss,tt后面又来一遍,真的很惨很惨,bug到顶了。。。题目大意:大致题意:输入由p、q、r、s、t、K、A、N、C、E共10个字母组成的逻辑表达式,其中p、q、r、s、t的值为1(true)或0(false),即逻辑变量;K、A、N、C、E为逻辑运算符,K --> and: x && yA --> or: x || yN --> not :原创 2014-03-03 18:40:44 · 588 阅读 · 0 评论 -
poj2155 Matrix 【二维树状数组】
有工具在手,这题就是一个模板题,就是有点不清楚,最后问的是单个元素的值,它怎么sum求出来的#include #include #include #include using namespace std;#define maxn 1005int c[maxn][maxn];int Row, Col;inline int Lowbit(const int &x){原创 2014-06-26 17:42:16 · 570 阅读 · 0 评论 -
poj3468 A Simple Problem with Integers
模版题#include #include #include //基于线段树的区间维护//维护结点o,它对应区间[L,R]#define ll long longconst int MAX_N=111111;const int MAX_Q=111111;int N,Q;int A[MAX_N+1];char T[MAX_Q];int L[MAX_Q],R[MAX_Q],X[原创 2014-05-26 01:25:34 · 831 阅读 · 0 评论 -
POJ 3074 SUKODU [Dancing Links DLX精准覆盖问题]
DLX各种教程看完之后,马马虎虎会写了真是有点抽象有点难,不过还是感谢各路大神完美的教程QUES SOLVE:http://www.cnblogs.com/ylfdrib/archive/2010/10/06/1844559.html http://blog.csdn.net/liujiyong7/article/details/5934494KNOWLEDGE PRE:原创 2014-06-29 17:38:21 · 751 阅读 · 0 评论 -
POJ2491 Scavenger Hunt【裸map】
#include #include #include #include #include #include #include #include using namespace std;int main(){ #ifndef ONLINE_JUDGE freopen("D:/1.txt","r",stdin); freopen("D:/2.txt","w",stdout原创 2014-06-02 02:27:23 · 963 阅读 · 0 评论 -
CF282 E Sausage Maximization[trie树]
给n个数求异或前缀(从前连续取一些数全作异或)和异或后缀(从后连续取一些数全作异或)异或的最大值好坑啊,指针好坑啊第一道trie树简单说下解法(其实壳还是不深):先异或所有数作为初始后缀然后从前往后的数逐个从后缀出来,进入前缀,在这个过程中,都把当前前缀变成二进制压入trie,然后当前后缀变成二进制从高位到低位尽量取和它数位不同的值,沿着trie往下走,得到一个最好原创 2014-09-08 17:49:34 · 694 阅读 · 0 评论 -
Codeforces 223A Bracket Sequence [栈]
给一串由(,), [ ,]构成的字符串,求包含[最多的合法子串很容易,先把整个字符串丢入栈里处理栈的每一个元素存两个东西,字符,在字符串中的位置处理方式为如果是()匹配则直接丢弃,如果是[]匹配则在这个点vis[i]++,然后求vis的前缀和如果栈空,则说明整个串是合法的,直接输出串否则,扫描栈中剩下的元素的位置,这几个位置把整个原串切割成几段,这几段肯定是合法的,求这原创 2014-08-26 13:25:50 · 702 阅读 · 0 评论 -
CF 319B Psychos in a Line 【单调队列】
给出一排神经病的编号1-n的某个排列给出规则一步能同时消除该数右边连续的小于该数的数问几步能消到最后状态 在纸上试了试,觉得这个问题很有点像lis,但是苦于方法突然看了一眼tags单调队列oh it is 可以把这些数字一个一个的加入单调队列中同时记录每个数字被吃掉的场次保持整个队列递减策略如下如果一个数进去没有弹出数,则这个数肯定是第一场就原创 2014-08-28 18:49:55 · 699 阅读 · 0 评论 -
CF 371D Vessels 【并查集】
给出一个竖着的n个容器每个容器的容积,从上到下分别是1,2,3,4,,n,从某点开始浇水,保证该层满了后水能流向下一层,一层一层,直到不再溢出或者最底下都装满了留到地上去了为之。给出n个操作/询问在x点浇p的水查询x点的水量 这题平妈想的,用并查集来做。很容易想到暴力的方法,就是,如果是从m点开始浇水,则,我一个一个来处理m以后的点,如果这点点满了就下一个,一直到找到没满的原创 2014-08-28 17:49:48 · 800 阅读 · 0 评论 -
CF156B Suspects 【逻辑+】
给出n个犯人的n条供述,并且知道有m条是真的正数代表当前犯人供述该号犯人犯罪负数代表当前犯人供述该号犯人没有犯罪例如+7代表当前犯人供述7号犯罪-3代表当前犯人供述3号没有犯罪 来想想某人可能犯罪的条件假设一个人犯罪那么如果说其他人犯罪的供述(暂时视作假话)条数+说他没有犯罪的供述(暂时视作假话)条数=n-m(假话条数)这个式子成立的话那么这个人就有原创 2014-08-28 18:24:01 · 822 阅读 · 0 评论 -
CF 111B Petya and Divisors【想法题+二分(可省略)】
给出n对询问每对询问类似x,y对该个询问,是这个x的约数却不是上面y个x的约数的约数个数是多少 很容易想出我们用一个二维数组来维护G[i]里面里面存的是含有约数i的位置有那些(由于从上到下来扫描并更新G,这个G[i]肯定是单增的) 那么对当前的一个询问x,y, 当前位置为i我们一个一个的得到x的约数,对每个约数m,看G[m]里面记录的位置有没有[i-y-原创 2014-08-28 17:53:28 · 629 阅读 · 0 评论 -
CF380C Sereja and Brackets [想法+线段树]
题意:给出一串括号给出一些询问,问某个区间[l,r]内的能合法匹配的括号数有多少个分析:我们可以实现处理两个数组sum[i] 1....i中已经能匹配的右括号的数目left[i] 1....i中还不能匹配的左括号数目这两个数组可以很简单的扫描一遍动态维护得出来我们可以先求前缀和,即1...m中有多少能匹配的右括号sum[m]则,我们可以得到s原创 2014-08-31 14:34:16 · 809 阅读 · 0 评论 -
CF377B Preparing for the Contest [贪心+优先队列]
题意:给出n个人的能力值,m个问题的难度值,请n个人需要的花费,花钱的上限s每个人能解决难度值小于等于他能力值的问题求出能否在花钱不超过s的情况下把所有问题解决如果可以输出YES并输出每个问题由谁来解决的最快的方案如果不行输出NO分析:可以二分枚举天数,因为如果一个任务能x天完成,肯定也能在大于x的天数内完成如果现在我们是要x天内完成可以先把原创 2014-08-31 13:52:18 · 1154 阅读 · 0 评论 -
CF 144D Missile Silos [最短路+想法]
题意:给出一张图和图上的一个顶点,求距离这个点距离为s(最短距离)的顶点或边上的点总共有几个(边上的点要保证也是最短距离)分析:先用DIJ求出最短路然后对所有顶点,距离为s的点都算上枚举每条边边上的两个顶点如果距离不够,则看在边上能不能找到一个点,顶点上的距离加上这个顶点到点的距离能为s(注意保证这个距离是最小距离(即这个点通过另外一端的顶点距离源点的距离小原创 2014-08-31 14:38:51 · 619 阅读 · 0 评论 -
CF 107B Basketball Team [排列组合]
类似高中的盒子取球,关键理解题意问题转化为,从m个盒子中取n个球,在取了h盒中的一个球的条件下,h盒还取了别的球的概率可以这样求得sum表示m个盒子中总共有多少个球从sum-1中取n-1个球的情况数是总情况数减去从sum-m[h]取n-1个球的情况数即是要求的情况数#include #include #include #include #includ原创 2014-08-18 14:42:02 · 794 阅读 · 0 评论 -
CF 383C Propagating tree [想法+树状数组]
题意:给一棵树给出两种操作:1.在某个结点上加上一个值,在这个结点所有的儿子结点上减去这个值,在这个结点的所有孙子结点上加上这个值,在所有曾孙子结点上减去这个值,直到底。2.查询某个结点上的值分析:把这个问题转化为树状数组的区间求和样例经过dfs处理后如下,每个结点处理出了两个值l,r,层数1,2,3...,层数为奇数的属性为0,层数为偶数的属性为1可以看到原创 2014-09-01 11:32:52 · 690 阅读 · 0 评论 -
poj2528 Mayor's posters 【线段树】
题目难度还好只要知道流程了,代码基本能写出来大致思路是:对所有区间的端点进行排序,并离散化节省空间时间然后读入每一张海报,更新所表示的区间,最后统计能看得到多少张海报比较坑的是,这题卡scanf,用c++交过的,载上一篇文章https://www.byvoid.com/blog/fast-readfile C++中的快速读取#include #include #includ原创 2014-05-22 18:44:49 · 574 阅读 · 0 评论 -
POJ1836 Alignment 【LIS(二分)+枚举】
a1,a2,a3,a4,a5,a6...an对ai求出a1到ai的lis,ai+1到an的lds取所有ai对应的lis+lds最大值输出n-lis-lds#include #include #include #include #include #include using namespace std;int n;double num[1111];double up原创 2014-06-05 13:49:24 · 716 阅读 · 0 评论 -
POJ2823 Sliding Window【双端队列】
求连续的k个中最大最小值,k是滑动的,每次滑动一个用双端队列维护可能的答案值如果要求最小值,则维护一个单调递增的序列对一开始的前k个,新加入的如果比队尾的小,则弹出队尾的,直到新加入的比队尾大,加入队尾从第k+1个到最后一个,按照上述规则,压入新数,然后弹出队首元素(满足队首元素对应原来序列的位置必须在视窗内,否则,继续弹出下一个)#include #include #in原创 2014-06-06 00:49:49 · 945 阅读 · 0 评论 -
poj1840 Eqs
大致题意:给出一个5元3次方程,输入其5个系数,求它的解的个数其中系数 ai∈[-50,50] 自变量xi∈[-50,0)∪(0,50]水题,不过有点技巧这样时间复杂度就从n^5变为n^2+n^3了用short int hash存储左边出现数字的次数,下标为左边的值,允许多对一,所以右边的值如果在左边出现,则count+=hash[sum]左边范围原创 2014-03-04 16:25:03 · 562 阅读 · 0 评论 -
poj2002 Squares
Hash表,和poj3349 雪花非常相似WA点:忘记打上输入为0的时候结束 应该是int i=0;i int j=i+1;j 免得一条边枚举2次涉及到一个数学知识,已知: (x1,y1) (x2,y2)则: x3=x1+(y1-y2) y3= y1-(x1-x2)x4=x2+(y1-y2) y4= y2-(x1-x原创 2014-03-04 20:14:40 · 541 阅读 · 0 评论 -
poj2513 Colored Sticks
大致题意:给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。解题思路:可以用图论中欧拉路的知识来解这道题,首先可以把木棒两端看成节点,把木棒看成边,这样相同的颜色就是同一个节点问题便转化为:给定一个图,是否存在“一笔画”经过涂中每一点,以及经过每一边一次。这样就是求图中是否存在欧拉原创 2014-03-05 11:37:35 · 515 阅读 · 0 评论 -
poj3349 Snowflake Snow Snowflakes
大致题意:在n (n 两片雪花相等的条件:雪花6个角的长度按顺序相等(这个顺序即可以是顺时针的也可以是逆时针的)大概思路:用连加求余法求key值(用同余定理简化),链地址法解决冲突写好左旋转模块和右旋转模块,进行地址冲突之后的比较边插入边比较,一旦有相同则停止处理,直到全都不同时候,输出没有俩相同的雪花需要的几原创 2014-03-04 14:06:00 · 681 阅读 · 0 评论 -
POJ3007 Organize Your Train part II
Hash表来做,key值,链地址法。key公式等于字符串中所有字符asc2码乘对应位数的和需要的函数1.将s拆分为s1,s22.反转字符串3.俩字符串合并4.计算k值5.建立并生成hash表函数如果当前hash[key]不存在,则新建立,count++如果当前存在新hash对象指向该hash[key],检验是否相同,如果相同的结束函数,否则存在下一个时,原创 2014-03-12 22:22:55 · 955 阅读 · 0 评论 -
poj 2431 Expedition
优先队列就是,将一路上的加油站都压进优先队列,油不够时候加上能加最多油的那个,不过注意读题,题目给的是加油站到终点站的距离,不是到起点站的距离,用结构体存储,然后对结构体排序。#include#include#include#include#includeusing namespace std;struct stopp{ int A; int B;}stop[1原创 2014-03-19 20:27:50 · 456 阅读 · 0 评论 -
poj 3050 Hopscotch
蛮水,很简单的dfs牛从任意点走5步,成一个五位数,问有多少个五位数可以得到(走五步,不包括开始走的脚下的数)用了一下STL的set工具#include#include#include#include#include#includesets;using namespace std;int g[6][6];int direction[4][2]={{-1,0},{1,0原创 2014-03-21 20:41:49 · 399 阅读 · 0 评论 -
线段树入门
线段树(segment tree)线段树在一些acm题目中经常见到,这种数据结构主要应用在计算几何和地理信息系统中。下图就为一个线段树:(PS:可能你见过线段树的不同表示方式,但是都大同小异,根据自己的需要来建就行。)1.线段树基本性质和操作线段树是一棵二叉树,记为T(a, b),参数a,b表示区间[a,b],其中b-a称为区间的长度,记为L。线段树T(a,b)也可转载 2014-05-16 18:02:52 · 460 阅读 · 0 评论 -
POJ1182 食物链 【并查集变种】
挺简单的N个元素扩展为 3*N个i-A i-B i-CA吃B吃C吃A挑战程序设计的89面#include #include #include #include #include using namespace std;int N,K;const int MAX_N=333333;//并查集int par[MAX_N];int rank[MAX_N];//树的原创 2014-05-20 01:28:04 · 752 阅读 · 0 评论 -
poj1195 mobile phones 【二维树状数组】
一次AC二维树状数组,有模版很好办注意二维树状数组这个下标是[1][1]的#include #include #include #include #include #include using namespace std;const int Max = 1030;int row, col, ar[Max][Max];// 二维的其实下标为[1][1],这个要记得。原创 2014-05-20 12:21:34 · 600 阅读 · 0 评论 -
poj3614 Sunscreen 【优先队列】
题意有C个奶牛去晒太阳 (1 而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。那么为了不让奶牛烫伤,又不会没有效果。给出了L种防晒霜。每种的数量和固定的阳光强度也给出来了每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。那么将奶牛按照阳光强度的最小值从小到大排序。将防晒霜也按照能固原创 2014-05-20 14:55:38 · 684 阅读 · 0 评论 -
POJ2010 Moo University - Financial Aid
题意:奶牛学校招生,c头奶牛报名,要选n头(n为奇数),学校是义务制,所以每头奶牛的学费都由学校负责。每头奶牛都由自己的考试分数和它需要花的学费,学校总共有f的资金,问合法招生方案中中间分数(即排名第(n+1)/2)最高的是多少。题解:先将所有的奶牛按照分数由高到低排序,假设k是招的奶牛中排名中间的那头,按照排序可知,[1,k-1]中的奶牛必定被招了(n-1)/2头,[k+1,c]中也必定被招原创 2014-05-20 18:57:48 · 714 阅读 · 0 评论 -
POJ2236 wireless network 【并查集水题】
一张图上分布着n台坏了的电脑,并知道它们的坐标。两台修好的电脑如果距离#include #include #include #include #include #include const int MAXN=111111;const int MAX_N=111111;int n,d;using namespace std;struct po{ int x,y; boo原创 2014-05-20 20:21:13 · 639 阅读 · 0 评论 -
poj1703 Find them,Catch them 【并查集】
做过一些的带权并查集,再来做所谓的“种类并查集",发现好像就顿悟了。种类并查集与带权并查集实质上的差别并不大, 关键的区别就是种类并查集只是带权并查集再弄个%取余操作而已,然后余数就表示他属于哪个种类。这题只有两个种类,也就是只有0和1两种, 对于两个不同的种类,那么之间的权值是相差1的,所以按照带权并查集的方法做加上1,然后取余2即可。#includeconst int N =原创 2014-05-21 02:18:10 · 639 阅读 · 0 评论 -
POJ1470 Closest Common Ancestors 【Tarjan的LCA】
很裸的模版题,不过Tarjan要好好多拿出来玩味几次很有点巧妙呢,tarjan,大概就是当前结点和它儿子结点的羁绊WA了俩小时,,,原因是,这个题是多数据的(还没告诉你T,用scanf!=EOF来控制结束),更重要的是和这个和Codeforces不一样,Codeforces的多组数据好像会重新开始程序似的,不用在程序里面写清零,但这个题是多数据用EOF来控制输入的,多数据在一个文件里都一次原创 2014-06-06 00:38:59 · 680 阅读 · 0 评论 -
CF359D Pair of Numbers [RMQ+ST算法]
题意:给一串数,找出最长的区间使得这个区间里面有个数能被其他所有数整除(包括它自己),求满足这个条件的最长区间的个数及长度,以及这些区间的左端的位置分析:这个区间的要求其实就是GCD(ALL)=MIN(ALL),能被其他数整除,这个数肯定是最小的,然后又能被其他数整除(包括自己)这个数就是GCD了可以二分枚举区间长度,然后验证答案的可靠性对当前长度的所有区间,套用RMQ原创 2014-09-01 12:53:17 · 977 阅读 · 0 评论