上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 34 下一页
摘要: 题目大意:在二维平面上,给一些点。有两个操作:给一个d,把所有x为d的点去掉,或把所有y为d的点去掉,问每次去掉的点。我的思路:先将横纵坐标都离散化(大部分时间都花在这个上面吧),然后直接把出现过的点(离散过的点)累计,每次询问之后就可以直接输出了,之后再维护一下,把对应的x或y的累计值 减1==! 很浅显的思路我的代码:600+msView Code #include<iostream>#include<map>using namespace std;map<int,int> mapx;map<int,int> mapy;map<int, 阅读全文
posted @ 2011-09-11 03:01 枕边梦 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 题目链接:hdu2050折线分割平面题意:求n条折线分割平面的最大数目.分析:我们不忙着解这道题。我们先来看一下N条相交的直线最多能把平面分割成几块很明显,当添加第n条直线时,为了使平面最多,则第n条直线要与前面n-1条直线都相交,切没有任何三条线交于一个点。这样,第n条直线一共有n-1个交点。我们知道,增加n个焦点,则增加n+1个平面。所以n条直线分割平面最大数是1 + 1 + 2 + 3 + ... + n = (n2 + n + 2) / 2 熟悉了线分割平面,现在,我们再来看看,每次增加的不是一条直线,而是两条相互平行的线,那又如何呢?当第N次添加时,前面已经有2N-2条直线了,按我们 阅读全文
posted @ 2011-09-09 09:03 枕边梦 阅读(243) 评论(0) 推荐(0) 编辑
摘要: hdu 1131 Count the Trees Catalan数的组合公式为 Cn=C(2n,n) / (n+1);此数的递归公式为 h(n ) = h(n-1)*(4*n-2) / (n+1)卡特兰数的一个应用:给顶节点组成二叉树的问题。 给定N个节点,能构成多少种不同的二叉树? (能构成h(N)个)但因为每一个节点都被命名了,也就是每一个节点都当做 是不同的,所以最后每一个卡特兰数都要乘以n!用组合公式化简得:h(n)=(2n)!/(n+1)! = 2n*(2n-1)* …… *(n+2)。#include<iostream>using namespace std;#defi 阅读全文
posted @ 2011-09-09 08:47 枕边梦 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 转帖自 http://xuyemin520.is-programmer.com/posts/26317.html还有 http://hi.baidu.com/a363310925/blog/item/aced542d719b2b5d4fc22695.html题意:M+N个人排队买票,票的单价是50¥,每个人只能买一张。 M个人拿50的去买,N个人拿100的去买,然后悲剧的是售票处开始的时候没有钱,所以如果拿100块买票人前面的拿50块买票的人小于或者等于用100块买票的人,这种排队方式就不合法,也就是不能顺利全部都买到票(因为没零钱找了)!卡特兰数的应用该题的公式:(C(m+n, n)-C(m 阅读全文
posted @ 2011-09-08 22:28 枕边梦 阅读(225) 评论(0) 推荐(0) 编辑
摘要: hdu 1267 下沙的沙子有几粒?参考自大牛http://www.wutianqi.com/?p=2642分析,这题其实是H和D的组合排列问题,只不过要考虑期间累计的H和D的数量关系。用DP来做,可以推导出:dp[i][j] = dp[i-1][j] + dp[i][j-1]dp[][]前一个表示H的数量,后一个表示D的数量。分上面那种情况是因为最后一个必然是H或者D,而此时可以考虑把新加的一个放在最后,因为假如加的是H,如果加在[i-1][j]中加入H,则最后一个依然是H或D,此时如果成立,那么依然属于[i-1][j]或[i][j-1]的情况。所以推导出此递推关系。#include< 阅读全文
posted @ 2011-09-08 20:25 枕边梦 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 嘿嘿,转帖的代码,感觉简单明了大数乘法来的,不过要注意的问题还真多#include <stdio.h>#include <string.h>void times(char *a,char *b,char *t) //大数乘法,a和b相乘,结果赋给t{ int len_a=strlen(a),len_b=strlen(b); int c[10]={0},d[200]={0},e[200]={0}; for(int i=0;i<len_a;i++) c[i]=a[len_a-1-i]-'0'; for(int i=0;i<len_b;i++) d 阅读全文
posted @ 2011-09-08 15:15 枕边梦 阅读(188) 评论(0) 推荐(0) 编辑
摘要: hdu 1997汉诺塔题目分析:转自:http://lcc3536.blog.163.com/blog/static/132469917201132283640123/1) 最初我们要判断一下是不是已经完全放好了,这样就不用考虑是不是最优化了, 因为都已经放好了,肯定是最合法的! 或者说全部在 A 上,这是还没开始动作的一个状态,所以也是合法的!2) 否则我们 要对每次状态的最大的那个进行判断,因为我们知道,汉诺塔最大的那个不可能停在 B 上,(假设 最初的时候都在 A 上,要移到 C 上去!),只可能在 A 或者 C 上面!如果是放在 B 上面,停止判断,直接断定他非法~这样我们得出了第二个 阅读全文
posted @ 2011-09-08 11:41 枕边梦 阅读(1003) 评论(0) 推荐(0) 编辑
摘要: 看得迷迷糊糊,还是一知半解啊…………转帖:http://blog.sina.com.cn/s/blog_59e67e2c0100a7yx.html首先引用下leemars的报告:这道题要求N!的最后一个非0数字是多少,如果用一般作法,先统计2和5的个数,然后补乘2,得到的将是TLE。所以还需要再做简化:为了把0去掉,我们把所有的因数2和5都提出来,放到最后再处理。N!中的N个相乘的数可以分成两堆:奇数和偶数。偶数相乘可以写成(2^M)*(M!),M=N DIV 2。M!可以递归处理,因此现在只需讨论奇数相乘。考虑1*3*5*7*9*11*13*15*17* ... *N(如果N为偶数则是N-1 阅读全文
posted @ 2011-09-07 22:38 枕边梦 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 转自http://xuyemin520.is-programmer.com/posts/26265.html题目:就是给你N个房间,然后每个房间1把钥匙,你最初手里没有任何钥匙,要靠破门而入!这里只有第一个房间不能破门进去,其他都可以,给你房间数N,和最多能破门的个数,让你求能全部把房间打开的概率!题目分析:又是是我的第一次啊!受教育了?有木有?这种题目是斯特林第一类数的应用,虽然很裸,但是很经典啊 !首先这题其实让我们求的是给 N个元素,让我们求K个环排列的 方法数。斯特林第一类数的第推公式:S(N,0)=0;S(N,N)=1;S(0,0)=0;S(N,K)=S(N-1,K-1)+S(N-1 阅读全文
posted @ 2011-09-07 21:35 枕边梦 阅读(1602) 评论(0) 推荐(0) 编辑
摘要: 若输入A 战胜 B时,就让B指向A。最后,指向空的就说明没有人战胜过他。如果这样的人只存在一个,那他就是冠军了。 名字的映射用map实现,出现过的名字用set保存#include <set>#include <map>#include <string>#include <iostream>using namespace std;int main(void){ int n, i, t; string b, e; set <string> s; set <string>::iterator it; map <string 阅读全文
posted @ 2011-09-07 16:26 枕边梦 阅读(190) 评论(0) 推荐(0) 编辑
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 34 下一页