自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

流沙-岁月

珍惜黄昏的村庄,珍惜雨后的村庄,万里无云如同我永恒的悲伤。

  • 博客(28)
  • 问答 (1)
  • 收藏
  • 关注

原创 cf505_B

题意:有n个点,m条边,边的权值代表某种颜色,有q个询问,每次询问两点之间是否有相同的颜色将其连通起来,若有,输出有多少种相同的颜色。     分析:Floyd的变形,相当于给出点与点之间的多种关系,然后询问你任意两点之间的关系数目。  代码如下:#include#include#include#include#include#include#include#includ

2015-01-19 10:20:36 1056

原创 poj 3255(次短路)

题意:给出n个点,m条边,求从顶点1到顶点n的次短路。      分析:首先可以知道,次短路应是在最短路的某个顶点处绕了出去,然后又回到最短路的某个顶点,而且只会绕一次(绕多次的距离肯定比绕一次的大)。再考虑次短路上的两个相邻点i和j,用d1[i]表示从源点1到i的最短距离,用d2[j]表示从j到汇点n的最短距离,那么当i和j在次短路与最短路重合的部分(即没绕出去的那部分),d[i]+w[i]

2015-01-18 13:41:20 378

转载 ACM进阶指南

ACM队不是为了一场比赛而存在的,为的是队员的整体提高。大学期间,ACM队队员必须要学好的课程有:l C/C++两种语言l 高等数学l 线性代数l 数据结构l 离散数学l 数据库原理l 操作系统原理l 计算机组成原理l 人工智能l 编译原理l 算法设计与分析除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。以下学

2015-01-17 12:17:22 399

原创 最长单调递增子序列LIS

问题:       给出一个长度为n的数组,求出最长公共子序列(不一定连续,但顺序不能乱)。如 数组 {3 ,1,5,2,7  },结果为 {3,5,7}或{1,5,7},长度为3。解法 一:最长公共子序列          将原数组按升序排序,然后将得到数组与原数组求最长公共子序列,其结果就是最长递增子序列(以下简称LIS)。      如 3 ,1,5,2,7 排序后得到1,2

2015-01-16 11:21:24 483

原创 poj 3069

简单的贪心问题,直接上代码了。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long#define ULL

2015-01-15 16:00:11 455

原创 hdu 1852

考验智商和想象力的题。。。    两只蚂蚁相遇后掉头等价于这两只蚂蚁穿过了彼此继续前行。 代码如下:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #inc

2015-01-15 13:05:42 446

原创 poj 2559(单调栈)

题意:给出了一个矩形图,求出最大的长方形面积。      如果确定长方形的左端点L和右端点R,那么最大可能的高度就是min(hi|L      考虑一个面积最大的长方形,它的左端点是L,右端点是R,高度是H,那么必有h(L-1)i且h(j)      明确L(i)和R(i)的含义后,用单调栈就可以高效的求得。所求最大面积就是max(h(i)*(R(i)-L(i)))。代码如下:

2015-01-15 10:58:10 383

原创 cf500_B

题意:给一个序列,通过交换元素位置,得到一个尽量小的序列,注意只有g[i][j]=='1'时,a[i]和a[j]才能交换位置。       主要是判断出哪些位置的元素可以交换,用Floyd和并查集都行,当然,后者要快些。      Floyd的代码:#include#include#include#include#include#include#include#inclu

2015-01-14 11:17:15 300

原创 hdu 1257(贪心)

这道题似乎用dp最好,不过我用的是贪心,对每个导弹,选择比它高度高且最接近它的拦截系统拦截,拦截后更新系统的能拦截的高度。   代码如下:#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long lon

2015-01-13 16:52:15 385

原创 cf501_C

看了题解后才发现真是道水题,哎,还是太弱了.......      主要从叶子入手,因为叶子的度数为1,所以其异或和就是与它相邻点的编号。      将所以度为1的叶子结点放入队列,然后取出来,得到一条边,再将相邻点的度减一,判断是否为1 ,是就入队,一直循环至队空。代码如下:#include#include#include#include#include#include

2015-01-13 16:04:04 775

原创 poj 2965

这道题可以用搜索做,不过有一种更为简单巧妙的方法,在网上看了大神的介绍才知道的。     1,有一点容易明白,一个位置改变了偶数次的话,状态是不变的,改变了奇数次的话,状态才和原来的相反。     2,现在考虑如何把一个位置的‘+’变成‘-’ ,而让其它位置不变?可以先以该位置做一次题目中的翻转,再让该行和该列的每一个元素做一次题目中的翻转,可以发现,'+'号的位置做了9次改变,而该行该列

2015-01-13 14:29:41 347

原创 hloj1206(三维搜索)

题意:给一个三维迷宫,求从入口到出口所用时间。       红果果的水题,因为第一次写三维搜索,所以就晒晒。。。。代码如下:#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;

2015-01-12 14:01:46 409

原创 hloj 1180 (模拟题)

Description        在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。如果你点击的位置

2015-01-12 10:28:20 1273

转载 hloj1201

Description回文数从小到大排列,1,2,3,4,5,6,7,8,9,11,22.....输出第n个回文数。Input多组样例。每行包含整数 n (1Output输出第n个回文数。Sample Input224Sample Output2151

2015-01-12 10:22:37 467

原创 poj 1753(位压缩+搜索)

题意:有一个4*4的方格,每个方格中放一粒棋子,这个棋子一面是白色,一面是黑色。游戏规则为每次任选16颗中的一颗,把选中的这颗以及它四周的棋子一并反过来,当所有的棋子都是同一个颜色朝上时,游戏就完成了。现在给定一个初始状态,要求输出能够完成游戏所需翻转的最小次数,如果初始状态已经达到要求输出0。如果不可能完成游戏,输出Impossible。      分析:看完这道题,一种很直观的想法就是,对

2015-01-12 08:48:15 452

原创 hdu 3410(单调队列)

题意:     给出一个数组a[],问你对于第i个数,从最后一个比它大的数到它之间比它小的数中最大的那个数的下标,以及它右边到第一个比它大的数中比它小的数中最大的那一个数的下标。     eg:a[]= 5 2 4 3 1    left     0 0 2 0 0        对5来说左边比它小的数没有,所以是0。对2来说左边比它小的数没有,所以是0。对4来说左边比它小

2015-01-10 10:08:47 704

原创 hdu 3706

就是一道用单调队列求区间最小值的问题,然后把每个区间的最小值累乘起来。    代码如下:#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;const int M=1010;c

2015-01-09 16:29:39 785

原创 hdu 3530(双单调队列)

题意: 给n个数,求一个最长连续子序列,在这个子序列中,最大值与最小值之差要在区间[m,k]内,输出这个子序列的长度。      分析:用两个单调队列,一个递增,一个递减,然后枚举区间尾,不断维护两个队列,需要注意的是,当队首元素之差小于m时,不需要更新队列(因为如果后面有更大的元素进来,差可能就会大于等于m),而当队首元素之差大于k时,将两个队列中较小的队首出队,并用last标记,表示这是最

2015-01-09 14:48:13 545

转载 如何提高理解能力

早上醒得早,随手翻看了英国哲学家怀特海写的哲学小册子《思维方式》(商务印书馆,刘放桐译),立刻被吸引住了,并且引起了我的震撼。觉得这本书读得为什么这么迟。书里细致而全面的分析了人的思维方式,很多论述充满了天才般的想法。其中有一部分是关于理解力的,我觉得这和我们的学习能力密切相关,不得不总结一下。如果我们理解力提高了,那我们学习的效率将大大提高,不是我们的智商有问题,是我们的理解问题的模式有问题。

2015-01-08 22:18:17 706

原创 hloj1105

题意:有n个点,m条边,q个操作,连通的点属于同一个集合。操作有两种:                  1:Q a,b,询问a和b是否属于同一个集合,若属于,输出"Yes",否则输出“No”;                  2:D i,删去第i条边     分析:并查集删边。将q个操作先保存起来,然后逆向扫描每一个操作,因为将边建立好后再删边,等价于将删边的顺序反过来建边。 

2015-01-08 16:24:23 283

原创 hud 3415(单调队列)

题意:给出n个数的循环序列,要求长度不超过k的连续子序列之和的最大值。      分析:单调队列求解。单调队列就是有单调性的队列,可以从两端删除元素,但还是只能从 队尾添加元素。可以认为这种队列前面存的是过期的值,后面存的是还有用的                       值。                                         单调队列一般用来求解固定区间

2015-01-07 16:51:01 434

原创 hloj1182(括号匹配)

这道题就是考考栈结构的应用。      先开一个数组作为栈,接着从左到右扫描括号序列,每次扫到一个括号,就将其于栈顶括号进行比较(当栈为空时,直接入栈),若栈顶括号为‘(’,且扫到的括号为‘)’,则弹出栈顶括号,并继续扫描括号序列的下一个括号,否则就将扫到的括号压入栈中。一直重复这个过程,直到扫完括号序列。此时,若栈为空,则说明所给括号序列是都匹配的,否则输出"NO".     代码如下:

2015-01-06 18:17:41 432

原创 hloj1184(简单计算器)

由于运算符有优先级,因此计算时要先计算优先级高的,并且,运算符相同的话,前一个的优先级要高,如1+2+3,先计算1+2,再计算3+3。为了符合运算规则,计算时从左到右扫描算式,先将扫描到的数字和运算符保存起来,直到遇到一个运算符的优先级比后一个高,才对优先级高的运算符进行运算。那么,用什么保存扫描到的信息呢?栈。     开两个数组,一个作为运算数栈,只存数字,一个作为算术符栈,只存算术符。

2015-01-06 15:22:37 1132

原创 顽皮的字母

Description      大家都知道有26个英文字母,abcdef…。由这些字母组成了一个字符串,但是,由于这些字母日久生情,有一些字母挨在一起的时候就会一起跑走玩耍。我们对26个字母编号1~26,就是说1对应a,…,26对应z,第i个字母和第i+1个字母相互有好感,挨在一起会跑开,i为1~26里面的奇数,跑开之后空位由后面的字母补上。现在问题来了,输入一个长度为n(nIn

2015-01-06 15:05:18 604 1

原创 hdu 4193(单调队列)

#include #define N 2000002int a[N],sum[N],q[N];int main(){ int i,n,ans; while(~scanf("%d",&n) && n) { for (i=1;i<=n;i++){ scanf("%d",sum+i); sum[i+n]=s

2015-01-05 17:53:55 501

原创 poj2823(单调队列)

题意:给定n和k,并在下一行给出n个数字,要求一行输出从左到右,每个长度为k 的区间的最大值,下一行则输出最小值。    分析:线段树和单调队列皆可求解,我用的是单调队列。               首先,什么事单调队列?其实就是指队中元素单调递增或递减的队列。为了维护这一性质,单调队列在压入元素时,若加入的元素会破坏队列的单调性,则将队尾元素删除,直到元素压入队尾后队列仍符合单调性。因

2015-01-05 16:07:02 382

原创 hdu 1022(Train Problem)

就是一道考栈结构运用的题,挺简单的,用数组实现一下就行了。     代码如下:#include#include#include#include#include#include#include#include#include#includeusing namespace std;const int M=1010;const int N=100010;int n;c

2015-01-04 17:04:55 396

原创 九度oj 特殊的数字

题目描述:现在有n个数,其中有一些出现了一次,一些出现了两次,一些出现了很多次。现在要求你找出那些只出现一次的数,并按升序输出。输入:本题有多组case。每个case有两行,第一行输入一个n,表示有n个数,1第二行有n个数字。每个数字的大小范围[1, 1000000]。输出:每次输出有两行。第一行输出一个整数,表示出现一次的数

2015-01-02 17:44:24 504

空空如也

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

TA关注的人

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