随笔分类 -  Basic

摘要:http://www.bianchengla.com/course/cpp/practise/problem?id=1310今天在北航oj上看到这道N皇后问题,记得做八皇后问题还是在大一c语言课上学的,当时还没接触算法,自然不懂回溯和递归,所以对八皇后的解法也只是理解了个大概,今天做到这题,上网搜了一下具体的做法,搜到一篇讲解很详细的blog:http://blog.csdn.net/hackbuteer1/article/details/6657109看明白后也就觉得不难写了,要做的就是算法的优化。自己写了非递归和递归的程序,位运算那个还是要好好理解一下吧。非递归:View Code #in 阅读全文
posted @ 2013-02-21 10:43 Misty_1 阅读(307) 评论(0) 推荐(0)
摘要:呃,题目是不长,但是太难理解了,不知道present还有分解的意思,看了discuss里的各种猜,还是没弄懂,最后看了解题报告,就一句话,每次删除连通分支里相邻的两条边,问最后能否全部删除完。呃,思路也很简单,如果每个连通分支里的边都为偶数则输出1,否则输出0.用并查集来实现。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <math.h> 阅读全文
posted @ 2013-01-29 08:45 Misty_1 阅读(307) 评论(0) 推荐(0)
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1446我只想说,读题太重要了,一定一定将题目中的每个要求都弄清楚啊!!!为了这题用了一晚上的时间在那调,结果只是题意没理解到位,输出的地方有问题,要崩溃了!!!!1)最终要求输出的是长度没错,但是要比较的是步数,也就是说,输的那一方跳跃的长度不一定就小于赢得那一方,还有每步的长度,而我是保存了跳跃的总长度,最后的时候比较找较小的。无语。。。。。2)如果两人的步数相等,也就是ZA胜,这种情况下LZ选择的是第一种场景,所以输出的长度应该是第二种场景 阅读全文
posted @ 2013-01-27 09:27 Misty_1 阅读(157) 评论(0) 推荐(0)
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1451今天下午的比赛题,该说自己理解能力太弱还是题目描述有歧义,比赛一开始我就找到了这道题,读完题感觉很容易,于是就用栈模拟了一遍,结果WA,又重新理解了一遍题,感觉应该没什么问题,将各种可能的想了一遍,改完提交还是WA,然后再改,最后终于想不出来还有什么情况了,于是重新读题,还是没弄懂要求输出的是最长合法子串的个数,我一直输出的是合法子串的总数,其实中间我曾想过有可能是让输出最长合法子串的个数,但是不确定,而且题目中给出的是“以及合法子串的个 阅读全文
posted @ 2013-01-26 18:55 Misty_1 阅读(270) 评论(0) 推荐(0)
摘要:呼,终于对了,真是太粗心了。。。。。。http://acm.hdu.edu.cn/showproblem.php?pid=4415题意:一个人开始时有m个能量,他要杀死n个人,杀死每个人需要消耗能量为ai,杀死这个人后可以使用这个人的武器杀死bi个人,为怎样才能消耗最少的能量杀最多的人。思路:贪心,比赛的时候根本没想用什么算法,只是按自己的想法写代码,怎么也不过,赛后问了一下队友,然后才觉得自己的想法还是有错误的。按队友的思路写了一个程序却怎么都是WA。最后发现原来是当Bi不为0的人都杀完后忘了加用武器杀死Bi为0的人的个数,呃,无奈啊。。将n个人按Bi是否为0分别存在两个数组中,如果Bi不为 阅读全文
posted @ 2012-09-25 20:13 Misty_1 阅读(134) 评论(0) 推荐(0)
摘要:题意:给出N*N个矩形,分成n*n个小矩形,然后给出M种颜色,每个小矩形可以涂一种颜色,并且有些小矩形已经涂完颜色,要保证这个大矩形无论是旋转还是反转都要保持不变,问有多少种染色方式。思路:中心对称图形,呃,其实找到有多少个小矩形可以然不同的颜色但又能保持是中心对称图形就基本上解决了这道题,找这些小矩形也很简单,是看了标程给出的公式才想到的,就是每个大矩形的左上角的那些小矩形。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream&g 阅读全文
posted @ 2012-08-17 10:40 Misty_1 阅读(177) 评论(0) 推荐(0)
摘要:题意:在M分钟里,每分钟会出现N颗龙珠,每颗龙珠的位置有题目给出,并且取走每个龙珠所消耗的能量也给出,同时在路上消耗的能量石|x1-x2|,如果在每分钟出现的龙珠里取一颗,问消耗能量最小是多少。思路:在比赛的时候就知道要有dp过,不过如果是不加优化的dp会超时的,所以要优化一下。先来推一下dp的状态转移公式。设dp[i][j]表示第i批龙珠中取第j个需要花费的最小体力。dp[i][j] = min{ dp[i-1][k] + abs(pos[i-1][k]-pos[i][j]) } + cost[i][j];如果直接用这个状态转移公式的,时间复杂度是:m*n*n,优化的话,如果每一个状态都看成 阅读全文
posted @ 2012-08-17 10:05 Misty_1 阅读(246) 评论(0) 推荐(0)
摘要:无奈了,只是用cout输出了两个回车,结果一个超时,一个竟然只用了100+ms,很无语~~题意:已知矩阵A:2 3 1 1 1 2 3 1 1 1 2 3 3 1 1 2已知矩阵B(8位16进制表示)。求A*B得到的新矩阵。思路:呃,这题中的加法是定义为异或运算的,没读题,只是听XH说了一下题意就开始做了,悲剧的是怎么都不对,然后又问了一下XH题意。。。。。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#i... 阅读全文
posted @ 2012-08-15 11:12 Misty_1 阅读(167) 评论(0) 推荐(0)
摘要:呃, 水题一枚,暴力就可以轻松过,但是还是想通过这种水题来让自己熟悉一下学过的算法,于是用了几种方法完成,呵呵,收获还是很多的~1、暴力过了一下,1A,呃,这个代码就不贴了,自认为代码写的还是很烂的,跑了16ms。2、二维树状数组。通过它终于弄明白二维树状数组是怎样求区间和的了。s[i][j] 表示从( 1 , 1 )->( i , j )的和,则要求( xi , yi )->( xj , yj )矩形的和话,则要表示为s[xj][yj] + s[xi-1][yi-1] - s[xi-1][yj] - s[xj][yi-1] ,其实一画图就能明白的,代码:View Code #in 阅读全文
posted @ 2012-08-11 16:38 Misty_1 阅读(159) 评论(0) 推荐(0)
摘要:题意:给出一个1*1的正方形,每条边上都有n个点,由对边上的点连成的线段将正方形分成(n+1)*2个不规则四边形,求其中面积最大的面积。思路:利用叉积求出所有焦点,然后用叉积求四边形面积求的所有的面积找最大的一个~代码:#include <stdio.h>#include <string.h>#include <iostream>#define N 34using namespace std;struct node{ double x , y ;}p[N][N] ;int n ;//叉积求交点struct node point ( struct node p 阅读全文
posted @ 2012-07-17 09:11 Misty_1 阅读(165) 评论(0) 推荐(0)
摘要:题意:给你一个字符串,通过翻转能得到多少种不同的字符串。思路:其实这题刚一读完题感觉很繁琐,但是仔细研究一下题目中给出的例子会发现也不是那么复杂,或许是看了ZJH的博客后,突然想通了,感觉复杂例子,也可以将它分类简单化。例如给你字符串:abcdef,第一种情况是串本身,第二种情况是bacdef,第三种情况是:bafedc,第四种情况是:abfedc,然后分别对这四种情况进行翻转,用hash函数标记。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream& 阅读全文
posted @ 2012-06-28 16:25 Misty_1 阅读(204) 评论(1) 推荐(0)
摘要:其实真的没读懂这题是什么意思,读了好几遍题怎么都弄不懂它到底想让求什么的,最后还是查了解题报告,但是他们讲的题意仍是不明白,直到看了代码才似乎明白点他的意思,唉,这个英语啊!我理解的题意:将每一个Pie都要平均分成x份,所有的x加起来要大于等于朋友数f。思路:二分,将最大的一份pie平均分f份,这当然包括他自己,作为二分查找的下限,将所有pie平均分成f份,作为二分查找的上限。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include 阅读全文
posted @ 2012-06-28 11:43 Misty_1 阅读(155) 评论(0) 推荐(0)
摘要:这些天忙着期末考试,很久没做题了,昨天刷了刷一些水题,练练有点生疏的手,呵呵~,今天重新开始训练计划。题意:在长度为len的线段上有N个点,各处每个点到起点的距离,让及衣橱M个点,使所有点中,两点之间最小的距离尽量大。思路:读完题后,我也以为实用贪心做的,但是后来看了discuss里讨论的都是用二分,然后就改用二分做了。先找出两点之间最小的距离作为二分查找的下限,线段长为上限,然后二分查找最适合的长度。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostrea 阅读全文
posted @ 2012-06-28 10:13 Misty_1 阅读(149) 评论(0) 推荐(0)
摘要:题目意思:给你若干棵树,问你每种树出现的概率;解题思路:(1)trie树 ,不过这题的输出很让人纠结,它是按ACSII表的顺序输出的,本以为大小写字母再加上一个空格,开53个数组就够了,但是不幸的WA了, 后来看了别人的解题报告,直接开到了95,改了一下就过了~(2)stl的map容器。不过这个很慢,可以过,但是没法很trie树的比,一个700+ms,一个3000+ms。呃,第一次用map,权当练练手。trie树:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iost 阅读全文
posted @ 2012-05-31 17:49 Misty_1 阅读(175) 评论(0) 推荐(0)
摘要:先说点题外话,昨天看了cq学长写的日志,他说我们的语言表达能力太弱,我觉得很对,以前写解题报告的时候,虽然知道怎么做出来的,可是就是无法用语言清晰的表达出来,有时嫌麻烦就直接粘了别人的一些话了说明,一篇报告总是弄的前言不搭后语的,其实语言表达能力也很重要。所以,以后会让自己尽量少的引用别人的话,尽量用自己的语言表达出想表达的意思。现在再来说说这道题,其实是一道很水的题,不过题意很容易让人误解,我就被误解了~~这题是用到了堆,不过如果我告诉你这题其实就是让你求第K小数的话,相信你不用优先队列也一样可以求出来。解题思路:用分治法,是大顶堆的堆顶元素始终小于小顶堆的堆顶元素,这样的话大顶堆中的所有元 阅读全文
posted @ 2012-05-28 21:33 Misty_1 阅读(199) 评论(0) 推荐(0)
摘要:恩,以前做过的一个智力题,本以为可以很简单解决,没想到却拖了好几天也没解决,总的来说是没理清思路,没想好怎么保存已经确定的状态,最后才考了一下网上代码才解决,其实开两个数组就行了,只是当时没想到,总是想着能少开个数组就少开个,节约空间,但是这样会浪费时间,其实结果是一样。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>int w[20];//存储现态;int f[20];//存储上一个状态int main(){ int len,cas,i,j; char left[20],right[20 阅读全文
posted @ 2012-05-04 09:59 Misty_1 阅读(188) 评论(0) 推荐(0)
摘要:类似于1961题,不过比1961要简单,只是让求最长的前缀,要注意它要求输入"."时表示输入结束。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>int next[1000005];char str[1000005];void init(){ int i,j; i=0;j=-1; next[0]=-1; while(str[i]!='\0') { if(j == -1 || str[i] == str[j]) { i++;j++; ... 阅读全文
posted @ 2012-04-24 21:04 Misty_1 阅读(167) 评论(0) 推荐(0)
摘要:最近在做模拟题,感觉自己编码能力太差了,想通过模拟题好好提高一下编码能力!这是一道简单的编码题,本以为可以很快就解决的,结果几乎花了我一上午的时间,失败啊~~~最后看了discuss里给的一组测试数据才把它给过了,唉,考虑问题不全面啊!!直接打表就行了~贴代码:#include<stdio.h>#include<string.h>#include<iostream>using namespace std;struct node{ int d; char mon[10];};node date[260] = {{1,"imix"},{2,& 阅读全文
posted @ 2012-04-07 10:51 Misty_1 阅读(246) 评论(1) 推荐(0)
摘要:这题是用的stl中的map容器做的,刚开始想用暴力来着,看看了别人给的提示,无疑暴力一定会TL,所以改变策略,想通过hash表来做(本来这道题就是在hash的练习里,所以直接想到用hash了),可是无论你是先算前两个还是前三个,都没法确定数组要开多大,第一次先开了一个10w的数组,结果还是不行,因为题目中没给a1,a2,a3,a4,a5的范围,不好开数组。搜了解题报告,看见有人用stl中map容器做的,又去学了下map容器的用法,http://hi.baidu.com/dizemmm/blog/item/29383e4eb564fa00b3de05d6.html其实这题很简单,就是在开数组上有 阅读全文
posted @ 2012-03-08 21:41 Misty_1 阅读(268) 评论(0) 推荐(0)
摘要:再次鄙视一下自己的英语水平,竟然没读懂题,好吧,我要学英语~~这题很简单,数据给的也很小,只要简单的模拟就过了,意思是:由括号序列S可经P规则和W规则变形为P序列和W序列。p规则是:pi是第i个右括号左边的左括号的数;w规则是:wi是第i右括号与它匹配的左括号之间右括号的数(其中包括它本身)。代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int p[25],s[25]; 5 char str[55]; 6 int main() 7 { 8 int t,n,i,j,k; 阅读全文
posted @ 2011-12-20 09:41 Misty_1 阅读(200) 评论(0) 推荐(0)