- 博客(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
空空如也
pyinstaller 打包引入gensim模块的脚本出错
2018-02-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人