- 博客(27)
- 收藏
- 关注
原创 poj 1095
<br />卡特兰数加递归,没想到能1A。<br />卡特兰数的含义有很多,其中一个是n个节点的二叉树的数目。卡特兰数的求法是c(2n,n)/(n+1)。于是我们能用卡特兰数来加快运算。直接求出给定数的二叉树含有几个节点。然后自己写个递归,返回指定数n的树。<br />#include<iostream>#include<string>using namespace std;int c[20]={ 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862,
2010-11-16 20:12:00 409
原创 2010成都网络赛H题解题报告
<br />最近一直在搞矩阵乘法,又阅读了matrix67大牛的那篇矩阵文章,于是想找一些矩阵乘法的题来做,网上搜了下今年成都网络赛H题的解题报告,发现没人写,于是自己写了个。<br />题意是给定一个数字n,然后用a-z和A-Z集合里的字符构造一个长度为n的字符串,有两个限制①相邻两个字符的ASCII码值不得超过32(可以等于)②至少一对相邻字符的ASCII码值等于32<br />可以将字符看成是点,这样如果两个字符可以相邻,则在两点之间连一条边,于是题目变为给定一个图的邻接矩阵,求从某点(要枚举)经过n
2010-11-03 00:53:00 439
原创 整数划分问题
<br /><br />今天刚好遇到一道整数分解题目,把自己以前的做过的题翻出来看了下,写了个小总结。<br />首先是最典型的整数分解,例如给定n个苹果,把苹果放到k个盘子里,允许有的盘子为空(poj1664),不妨设 f(n , k ) (边缘条件为当 n = 0 时,返回1,当 k = 1 时,返回1)表示结果,分析一下可以知道有两中放的方法,一种是有空盘,一种是没空盘,没空盘的情况可以知道每个盘子里至少有一个苹果,也就是说这种情况的总数为 f ( n-k , k ) 。而有空盘的情况,我们可以假设最
2010-10-28 20:05:00 759
原创 APUE学习笔记00
开始学习UNIX之前,先了解一下UNIX的历史会很有意思(http://baike.baidu.com/view/8095.htm#3)。许多人对UNIX有感情,多少和它那种“低调而伟大”的品质有关。低调,确实是,几乎所有的UNIX初学者都会遭遇的问题是“UNIX是什么?”、“UNIX和LINUX有什么区别?”、“谁在使用UNIX,为什么要学习UNIX?”,诸如此类。要知道这些问题的答案,一点点热情就够了,现在,开始百度吧! UNIX是一种调皮捣蛋的文化,充满了善意的恶作剧和玩笑。他们发明了K
2010-09-25 23:14:00 482
原创 黑书小球钟
<br />昨天晚上没事做,通宵看书看电影,6点多的时候把黑书里数据结构例题里的小球钟给做了。<br />这题是简单的队列加栈模拟,不过有用到一点置换群的概念;<br />代码如下:<br />#include<iostream>#include<stack>#include<queue>using namespace std;queue<int> q;bool use[1010];int num[1010];stack<int> s1,s2,s3;void swap(int
2010-06-21 08:16:00 418
原创 poj3411解题报告
一道DFS,可以用状态压缩DP做,题目大意是:给定一个N和M,N代表城市数目(城市以1-N命名),其中有M条边连接这些城市,城市之间可能有重边。接下来有M行。每行有5个输入,分别为ai,bi,ci,pi和ri。ai表示第i条边的起始城市,bi表示第i条边的末尾城市。经过每条边都需要付钱,有两种付钱方式,付钱数分别为pi和ri,当且仅当ci这个城市之前有经过,才可以用ri这种付钱方式。然后要求找出一
2010-05-15 00:15:00 1256
原创 POJ1704解题报告
一道博弈题,如果将每个棋子之间的间隔距离看成是石子数目,那就变为Staircase NIM问题了。所谓Staircase NIM问题,即:游戏开始时有许多硬币任意分布在楼梯上,共n阶楼梯从地面由下向上编号为0到n。游戏者在每次操作时可以将楼梯j(1上的任意多但至少一个硬币移动到楼梯j-1上。游戏者轮流操作,将最后一枚硬币移至地上的人获胜。这个问题与nim博弈的区别在于石头不是被扔掉而是移动
2010-05-06 23:17:00 670
原创 各类背包问题
今天刷了男人八题中的1742,是一道多重背包,一开始把1276代码改了之后交上来,发现TLE了,于是去disscuss区看了说,说用二进制优化的多重背包也是过不了的,要用更加优化的多重背包,于是上网搜了下,根据别人代码修改了自己的代码,于是AC了,不过实在看不出别人代码为什么会比自己那个优化那么多。写完后就搜了下背包问题,找到一篇介绍各类背包以及优化方法,觉得不错就贴上来了它是在1978年由M
2010-05-04 16:26:00 3709 1
原创 poj2192解题报告
昨天与师兄聊天的时候聊到了这题,师兄说可以用暴力dfs做的,之前一直以为是要用lcs之类做的,死活过不了。今天用dfs试了一下,果然暴力。。。一开始s3开得比较小,wa了,感到无语,想去discuss区找点数据,发现有人说s3开小了导致wa,于是改了下数组大小,ac了,汗啊,要引以为戒,比赛时可没有discuss区可以进。后面有人说此题可以用dp做,这类dp一直没搞懂,找个机会要看看怎么写
2010-05-01 23:41:00 429
原创 poj 2312解题报告
题目唤起了某人美好的童年回忆。Battle city游戏,给定你(YOU)的位置和目标(TARGET)位置,要求出从YOU到达TARGET的最少操作步数,过程中可能遇到墙(S)、河(R)、砖块(B)和空地(E),墙和河是不可逾越的,砖块可以先打碎使之成为空地,不过这样就需要多一步操作。可以认为是dijk的大水题了,不过题目给出的是一个二维矩阵,优先队列广搜也可。目的在于练习优先队列。有一点要注意,
2010-04-26 23:19:00 437
原创 poj1195解题报告
赤裸裸的二维树状数组。需要注意的就是如何求矩形(a,b)-(c,d)(左下角至右上角)的sum。#includeusing namespace std;int rec[1050][1050];int maxn=-1;int lowbit(int x){ return x&(-x);}int cal(int x,int y){ int temp; in
2010-04-26 00:03:00 494
原创 poj2481解题报告
较为基础的树状数组。一开始看到这题是不知道怎么用树状数组做的,直到又看了另外一道题2352并刷了2352后,才知道怎么做这道题。首先要对每只牛的范围做一次结构体排序,先排y再排x,这样的话,对于每只牛,只需要计算前面的情况(后面的牛的x和y必然小于等于它),于是对于每只牛,计算前面x值小于等于它的牛的个数就行,这里要注意题目中说到,如果一只牛的x和y均和另一只牛的x,y值相等,则该牛不比另外一
2010-04-25 23:57:00 682
原创 poj2352解题报告
一道基础的树状数组,题目大意是:给定一个星座的直角坐标图,每个星星都有一个坐标值(x,y);其中输入中的y是不下降的。求每个星星的等级。星星的等级的定义是:如果有m个星星的坐标(x,y)均小于等于该星星的坐标(x0,y0)则该星星的等级为m。由于n的数量达到15000,暴力做的话肯定TLE,因此要用到树状数组。由于y是不下降的,那么对于每个星星来说,计算它的等级只需要用到它前面给出的星星的坐标(后
2010-04-25 23:48:00 592
原创 poj2505解题报告
做出此题说明了猜题的重要性,看了题目后,分析了一下,没什么头绪,随便写了段代码,试了试几个数据,发现都对,于是提交,AC。。。。此题大意:stan和ollie玩一个游戏,每次stan从1开始。每一步,两人对当前数乘以一个数 i(2#includeusing namespace std;int main(){ double n; while(scanf("%lf",&n)
2010-04-22 22:50:00 470
原创 poj3258解题报告
跟3273差不多,买一送一。对可能的长度进行枚举,记录需要去掉的石头数,跟给定的m进行比较,然后二分不断逼近就行了。#include#includeusing namespace std;int x[50010];int main(){ int n,dis,m,i; int cnt,pre,rec; int left,right,mid; scanf("
2010-04-22 00:17:00 323
原创 poj3273解题报告
一道不错的二分,思路很重要。枚举可能的money值,然后判断分段的段数,跟给定值进行比较,接着不断逼近即可#includeusing namespace std;int n,m;int num[100010];int main(){ int left,right,mid; int i,sum=0; int cnt,temp,maxn=-1; scanf(
2010-04-21 23:44:00 470
原创 poj2181解题报告
一道基础的DP,题意大概是:牛们想跳上月球,但他们没办法跳跃,于是巫师发明了一些饮料,每种饮料有一个strength值,每次给出n种饮料,一种饮料只能使用一次,且必须按照给出顺序使用,假设一只牛使用了m种饮料,则它使用的第奇数种饮料(1,3,5,……)会增加牛的跳跃能力,而第偶数种饮料会降低牛的跳跃能力,求牛能跳跃的最大高度。如例子中,选择7,1,8,3,6。那么会得到7-1+8-3+6=17
2010-04-21 00:55:00 902
原创 poj2653解题报告
一道计算几何的题目,A的不容易,TLE到我无语,题目大意是:Stan有n根长短不一的木棍,他把木棍按1-n的顺序仍在地上,求出其中那些没被其他木棍盖住的木棍,按木棍的序号输出。里面有一句关键句子:"You may assume that there are no more than 1000 top sticks. "一开始没注意到这句话,一直TLE,后来在for中加了个break,就AC了,
2010-04-19 23:35:00 412
原创 poj2513解题报告
一道相当经典的题目,tire树+并查集+欧拉路。题意大概是:给定许多跟木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。可以用图论中欧拉路的知识来解这道题,首先可以把木棒两端看成节点,把木棒看成边,这样的话,相同的颜色就是同一个节点,问题便转化为了,给定一个图,是否存在“一笔画”经过涂中每一点,以及经过每一边一次。这样就是求图中是否存在欧拉路了
2010-04-18 01:14:00 653
原创 poj1329解题报告
赤裸裸的求三角形外接圆,即根据三点坐标确定圆心坐标和圆的半径。圆的半径=a*b*c/(4*s)(a,b,c分别为三角形的三边长,s是三角形的面积)。s=a*b*sinA/22*r*sinA=a (画图,构造直角三角形,同弧对同圆周角可证)由上两式则可推出半径的公式。 圆心坐标。设三角形的三个顶点坐标为(ax,ay,(bx,by),(cx,cy);圆心坐标为(rx,ry)
2010-04-16 14:00:00 1429
原创 poj2908解题报告
很不错的一道广搜题。题目给出nop个操作,由N(什么都不做),S(置1),C(置0),F(反转)等基本操作组成,每一种操作会产生不同的热量。又给出nw组初始字符串和目标字符串,要求出将初始字符串转化成目标字符串至少需要产生的热量;有可能没有解,此时输出“NP”。这道题有两个关键,第一是优先队列的思想,而且必须是自己写的优先队列,STL一般是会超时的。本程序优先队列部分参考《算法导论》(在这道题
2010-04-15 00:27:00 729
原创 斐波那契数列的另一个递归式
上次同学给道题给我,是关于斐波那契数列的。本来是要求其他的东西,但写着写着发现了这个新的递归式,尽管可能作用不大,但还是想写出来f0=0;f1=1;f2=1;f[i]=f[i-1]+f[i-2];f[i]=2*f[i-2]+f[i-3];f[i]=3*f[i-3]+2*f[i-4];f[i]=5*f[i-4]+3*f[i-5];……f[i]=f[
2010-04-14 15:54:00 262
原创 poj3122解题报告
自从上次在校赛被道二分给虐了后,一直想做二分题。题意是:某人在生日的时候请朋友一起吃pie,但是他的朋友十分挑剔,如果有人分到了一块比其他人大的pie,那么其他的朋友就会抱怨,因此每个人,包括主人,都必须分到大小一样的pie,但是每个人的pie只能是从一块大的圆形pie中切出来的,要求求出每人能分到的最大的pie,给定圆形pie的数量n,朋友数量m,以及每个pie的半径r【i】。一道基础的
2010-04-14 15:46:00 523
原创 poj1905解题报告
一道二分题目,大意是一根横在两堵墙之间的木棒受热膨胀后,变为弧形,求弧形中点与原木棒中点的距离,给出木棒原长度Len,膨胀系数Coe,加热的度数n,膨胀n度后长度为S=Len*(1+n*Coe);这样根据一些数学知识就可以得到下面三个式子①R^2-Len^2/4=(R-H)^2②sinθ=Len/2R;③θ=S/2R;由一系列变换可求出S0=R*asin(Len/2R),其中R=(
2010-04-12 14:42:00 1087
原创 poj2415解题报告
题目介绍了一种游戏,共有三个piece(不妨称为棋子),棋盘是由N个点构成的完全图,边有颜色。每次可以移动一个棋子,移动时必须满足棋子走过的边的颜色和其他两个棋子之间的连边的颜色一致。求把三个棋子移到同一个顶点的最少次数。基本的宽搜,对三个棋子,分别考虑可能的放置,符合条件就加入队列。#include#include#include#define MAXN 55using
2010-04-11 23:29:00 572
原创 poj1674解题报告
置换群的一个应用,找到给定序列中环的个数,再用元素个数减去环数,就是所求的数。#include using namespace std;bool use[10010];int num[10010];int main(){ int test,n; int count,i; scanf("%d",&test); while(test--) { coun
2010-04-11 20:40:00 513
原创 poj1855解题报告
一道比较水的搜索题,题意是给定n个不同厚度的硬币。然后给定m个不同长度的leg值,要求找出四种硬币,用这四个硬币组成四条leg,高度要求都一样,找出一个最接近leg且小于等于leg的best值和一个最接近leg且大于等于leg的best2。其中leg的长度超过1亿,我把best2初始化为20亿就ac了。#includeusing namespace std;int num[60];
2010-04-11 12:28:00 483
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人