上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 26 下一页
摘要: 有n只羊,(姑且算是羊吧,也有可能是牛啊猫啊什么之类的),每只羊都有一个身高,前面的羊要看到后面的羊的条件是,后面的羊高度要小于前面的羊,就问各位羊加起来看到的牛多少只.......#include#include#includeusing namespace std;int main(){ int n; while(scanf("%d",&n)>0) { stackQ; __int64 num,sum=0; scanf("%I64d",&num); Q.push(num); for(int i=1;i<n;i++) { sc 阅读全文
posted @ 2013-06-23 21:31 紫忆 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 题意:给出连续的矩形的高....求最大面积#include#include#includeusing namespace std;struct node{ __int64 num,pre,next;};int main(){ int n; while(scanf("%d",&n)>0&&n) { stackQ; node tmp; __int64 ans=0,sum=0,num; scanf("%I64d",&tmp.num); tmp.pre=1; tmp.next=1; Q.push(tmp); for(int 阅读全文
posted @ 2013-06-23 21:11 紫忆 阅读(727) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一段区间,需要你求出(在这段区间之类的最小值*这段区间所有元素之和)的最大值......例如:63 1 6 4 5 2以4为最小值,向左右延伸,6 4 5 值为60.......思路:解决完为这道题目,我才真正明白了单调栈的原理,它就是以某一个值为最小(最大)值,向这个值的两侧延伸,遇到大于它(小于它)的值,就将它延伸的范围扩大,当然,一般来说,要这样做的算法复杂度为o(n^2),但是借助栈这个玩意,维护其单调增(减),就可以在o(n)的时间复杂度解决这个问题。将一元素加入栈时,先判断它是否大于(小于)栈顶元素,若是大于(小于)栈顶元素,加入栈。(从这里开始只讲维护单调增栈)否则,将 阅读全文
posted @ 2013-06-23 21:04 紫忆 阅读(8907) 评论(3) 推荐(5) 编辑
摘要: 本来实在做后缀数组的题目的,不巧,碰到了pku3415这题,需要用到单调栈来维护,但是之前又没有学习过单调栈这方面的知识,于是水了几题.......题意:给你一些连续的小矩形,高宽不定,求最大的矩形面积........思路:直接用单调栈,当有一个矩形的高小于等于栈顶元素的高时,出栈,并维护这个即将入栈的元素的向前延伸的宽度范围,维护出栈后的栈顶元素向后延伸的宽度范围.......#include#include#includeusing namespace std;struct node{ __int64 h,pre,next,w;};int main(){ int n; while(scan 阅读全文
posted @ 2013-06-23 20:17 紫忆 阅读(1171) 评论(0) 推荐(0) 编辑
摘要: http://acm.timus.ru/problem.aspx?space=1&num=1297题意:求一串字符串的最长回文字串.......思路:在原串后面加一个独一无二的字符,再把原串倒过来接在原串后面。这样,要是有回文串的话,其必然有两个后缀的前缀相同这样,我们就可以枚举以每个字符为(k)中心的回文串,再找到它倒过来后所对应的那个位置2*len-sa[k],找到排在这之间的最小height值,也就是这两个字符串的最长公共前缀,也就是以(k)位置为中心的回文串.......根据height数组特性,lcp(i,j)=min(height[i+1],height[i+2]..... 阅读全文
posted @ 2013-06-09 20:04 紫忆 阅读(1189) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给出一个字符串,问它的不重复子串有多少个。两题是一样的,除了字符串长度.......思路:用后缀数组可以轻松解决。因为这个字符串的每个子串必然是某个后缀的前缀,先用后缀数组求出sa和height,那么对于sa[k],它有n-sa[k]个子串,其中有height[k]个是和上一个后缀重复的,所以要减去。所以用后缀数组求解的时间复杂度是O(n),后缀数组要是用倍增算法是O(nlog2n),效率很高。代码:#include#include#includeusing namespace std;#define maxn 50010int wa[maxn],wb[maxn],wv[maxn]; 阅读全文
posted @ 2013-06-03 19:21 紫忆 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 最近看黑书看到数据结构之后缀数组了,以前没有搞过后缀数组,初学起来感觉比较难,网上参考了两种后缀数组学习笔记,以及罗穗骞倍增算法代码,这里附上链接:http://tieba.baidu.com/f?kz=754580296http://www.cnblogs.com/staginner/archive/2012/02/02/2335600.htmlhttp://wenku.baidu.com/view/ed1be61e10a6f524ccbf85fd.html他们的都是纯文字说明,这里我按照自己的理解方式,附上自己的数据.......这是模版:int wa[maxn],wb[maxn],wv[ 阅读全文
posted @ 2013-06-02 22:47 紫忆 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 我能说这道题目被黑书坑了吗?这是递推题?......好吧,那么我是的确没有想到这样去做的。只是想着,可以枚举缺少的位,然后用搜索去解决.......但是我仔细思考,觉得用搜索太麻烦了,要处理很多细节,于是百度了下......唉,不得不说,大牛的思路就是不一样,碉堡了......思路:用b表示缺少的那一位的数字,k表示b所在的位数,那么可以用a表示比b位数低的数,用c表示比b位数高的数,就有一下解法:A=a+b*10^k+c*10^(k+1);B=a+c*10^(k+1);依照题意:A+B==n;那么2*a+(b+11a)*10^k==n从而得出:c=n/(k^10)/11;b=n/(k^10) 阅读全文
posted @ 2013-05-30 20:26 紫忆 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 黑书P38,这是黑书给出的思路:我就是按照这个思路来编写的,不过有几个需要注意的地方,导致我wa了几次。先说说我自己编完这道题目的想法吧:看完这道题目,我的想法是按照一分钟一分钟去模拟,再判断哪天会是全部相等,但无疑,我那种想法必定超时。然后看了黑书的思路,发现原来有周期的是可以这样做的......学到了,以后对于类似的题目,可以思考这么做,求出单个的周期,再求它们的最小公倍数......注意:可以这样做的条件,是必须要是初始和末尾状态相同的,就这道题目来说,小球是要全部在底层的队列里面才可以这样思考的,那么,当不是所有的小球都在底层的时候,我们必须要使它们到底层的时候,才能这样操作的.... 阅读全文
posted @ 2013-05-30 19:56 紫忆 阅读(683) 评论(0) 推荐(1) 编辑
摘要: 看到这个题目,第一想法就是枚举......唉,我的思维差别人太多了......思路:首先若是没有1717的限制,那么将袋子编号为0~~n-1,每个袋子一次取0,1,2,~~n-1颗豌豆,然去称量,再计算0+1+2+~~n-1为多少,用乘凉的数减去总和,剩下多少颗豌豆就是那个编号的袋子是魔法豌豆.......现在有着1717的限制,那么我们依旧可以给袋子编号,但是应该是一组一组的编号,分为59个袋子为一组,编号为 0~~58,每一组的每个袋子取编号豌豆,然后再去计算,多出了的重量就是编号为那么的组号,然后在分....只要总质量《=1717就好......这样在10次内乘凉完 阅读全文
posted @ 2013-05-29 02:09 紫忆 阅读(387) 评论(0) 推荐(0) 编辑
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 26 下一页