
数据结构
文章平均质量分 73
Lbbbbpro029
这个作者很懒,什么都没留下…
展开
-
HDU 1754 I Hate It(线段树_单点更新)
支持两种操作Q x y 查询 [x,y]区间内的最大值。U x y 将x位置的点值更新为y;线段树模板水过#include #include #include using namespace std;const int N=200000+5;struct tree{ int a[N<<2]; void push(int cur)原创 2015-08-07 16:08:10 · 318 阅读 · 0 评论 -
HDU 1075 What Are You Talking About(STLmap的应用)
大意:给出几组英文和火星文的对应关系,翻译下面给出的句子。思路:翻译表现的是映射的关系,所以用map来记录对应关系。TIP:可能录入多出的空行导致PE。#include #include #include #include #include using namespace std;map word;int main(){ string inp,b,a;原创 2015-08-11 15:44:24 · 304 阅读 · 0 评论 -
HDU 1247 Hat’s Words(字典树)
思路:改造字典树模板,Search在访问节点时如果发现单词结尾对剩下部分进行查询,若剩下部分正好对应另一个单词就输出。TIP:题目说要按字典序输出,但是貌似是不用的...#include #include #include #include using namespace std;const int b='a';const int cz=1000000;char a原创 2015-08-11 14:30:40 · 332 阅读 · 0 评论 -
HDU 1671 Phone List(字典树)
大意:插入n个电话号码,如果其中有一个是另一个的前缀就输出NO。思路改造字典树模板,当最后一个字母插入时节点已存在或插入时该节点已标记为结尾,flag=false。#include #include #include #include using namespace std;int ans;struct trie{ int tot,root,c[100050原创 2015-08-11 13:38:06 · 285 阅读 · 0 评论 -
POJ 1611 The Suspects(并查集)
简单的并查集问题,引入计数数组num来记录该根节点的对应的集之中的人数,刚开始时num均为1。逐次将团体编号输入到并查集中,最后找到0的根结点,输出对应的num值。TIP:题目数据有可能给出两个相同的集合合并,所以合并时要加上 if(a==b) return; 否则WA。#include #include #include using namespace std;int n;原创 2015-08-09 15:08:55 · 312 阅读 · 0 评论 -
POJ 1182 食物链(并查集+逻辑关系)
大意:存在三种生物A吃B, B吃C,C吃A。有两种语句1 x y:说明x与y为同类 2 x y:说明x吃y根据规则来判断下面说的话存不存在假话,最后输出假话的值。判断为假话的条件:1) 当前的话与前面的某些真的话冲突,就是假话; 2) 当前的话中X或Y比N大,就是假话; 3) 当前的话表示X吃X,就是假话。题意:POJ2原创 2015-08-09 15:41:48 · 416 阅读 · 0 评论 -
HDU 1558 Segment set(并查集+判断线段相交)
大意:支持两种操作:P x1,y1,x2,y2 插入一条线段Q x 输出第x条线段直接或间接与它相交的线段的数量+1(它自身)。思路:以此判断与之前的线段相交,如果相交就合并集合,并查集模板与判断线段相交模板水过。TIP:样例之间需要输出空行。#include #include #include #include using namespace std;原创 2015-08-09 18:05:21 · 355 阅读 · 0 评论 -
POJ 2492 A Bug's Life(并查集+逻辑关系)
大意:科学家假定这种虫子只存在异性繁殖,然后给出了m组繁殖的虫子,判断它们之间的关系来求是否存在同性繁殖。思路:建立关系数组s来判断其与根节点的的关系,0为同性,1为异性。判断出现同性繁殖的条件为出现一组虫子在一个集合中并且与根节点的性别关系相同,性别不同的情况为正确情况。在不同集合中时进行合并操作。TIP:判断出现同性繁殖也需要继续输入,Scenario之间有空行。#原创 2015-08-09 15:25:47 · 521 阅读 · 0 评论 -
HDU 1166 敌兵布阵(树状数组)
单点更新以及查询区间和,树状数组水过。#include #include #include using namespace std;int n;int a[50005];int lowbit(int x){ return x&(-x);}int sum(int pos){ int ans=0; while(pos>0) {原创 2015-08-07 15:17:28 · 273 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number(求最小逆序数)
大意:给出0~n-1的n个数的一种排列,并且可以将第一个数字移动到最后一个形成新的排列,求这些排列的逆序数(满足iaj的数对)的最小值。思路:求出原排列的逆序数a之后,下一个排列的逆序数值b应该符合b=a-inp[i](移动的数字值)+n-inp[i]-1;因为inp[i]为第一个元素时,后面必有inp[i]个比它小的数,所以减少了inp[i]个对数,而移动到最后一个的同时增加了n原创 2015-08-07 17:05:21 · 368 阅读 · 0 评论 -
20160322 HDU5317 RGCDQ(筛数+树状数组)
题意:F(n)是n的不同素因子的个数,求在[ L,R ],区间内最大的gcd(F(i),F(j))。思路:可以注意得到数据范围小于1E6,意味着F(n)的取值范围很小(不会超过7)。很容易想到记每个位置的F(n),在查询区间时返回区间内各个F(n)的个数,然后判断gcd值的方法。用素数表将范围内所有的F(n)筛选出来,通过树状数组来求区间和。#include #inclu原创 2016-03-22 21:14:50 · 279 阅读 · 0 评论