摘要: 额,还是大数问题,不难,就是,居然来一个这么变态的测试数据1000000000输出 0#include<iostream>#include<math.h>#include<string.h>using namespace std;int main(){ char str[101]; int sum[110],j,k,cas,num; num=0; cin>>cas; while(cas--) { if(num++) cout<<endl; memset(sum,0,sizeof(sum)); while(cin>>str) 阅读全文
posted @ 2011-08-05 20:07 枕边梦 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 额,同一个代码,贴了三道题 ,都不用改的,卡特兰数的应用,还有hdu1130,hdu1134出栈次序问题,其实就是卡特兰数的应用卡特兰公式:令h(1)=1,h(0)=1,catalan数满足递归式: h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2) 另类递归式: h(n)=((4*n-2)/(n+1))*h(n-1); 该递推关系的解为: h(n)=C(2n,n)/(n+1) (n=1,2,3,...)用递归式来做,接下来就是一个大数问题了,(4*n-2)/(n+1) 不能直接算,未必整除呀ORZ先算(4*n-2)*h(n 阅读全文
posted @ 2011-08-05 19:25 枕边梦 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 判断是否存在欧拉回路存在欧拉回路的条件:无向图1) 连通2) 所有节点的度为偶数不知道用并查集做是不是本来就比较慢,反正慢了好多#include<iostream>using namespace std;int r[1000],f[1000];int find(int x){ if(x==f[x]) return x; f[x]=find(f[x]);};void Union(int x,int y){ int a=find(x); int b=find(y); if(a!=b) f[b]=a; return;}void init(int n){ for(int i=0;i< 阅读全文
posted @ 2011-08-05 14:04 枕边梦 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 刚开始看到这题都吓到了,第一感觉就是不能记录已走过的点,一旦记录了,那假设钥匙在对面,门在这边,那拿完钥匙就回不来了;可是,如果不记录的话,那岂不是在整个地图了乱窜,绝对超时,甚至是死循环;之后,想了想,把每个点在入队列的时候,记录下状态每一个点的状态,即又有没有拿到钥匙,拿到哪几种钥匙之类的,如果回溯时,俩点的状态一样,则没必要入队,这确实是一种可行的办法,可是想到这里,突然,想到,要对每一个点保存16种状态,那内存肯定要爆了呀,结果思路就这么停了,想不出别的办法了……查了一下,原来记录状态是用位运算保存呀,郁闷呐,亏我知道这东西存在,亏我还用过位运算保存过一个数字是否出现过,结果我居然一点 阅读全文
posted @ 2011-08-05 11:37 枕边梦 阅读(1091) 评论(0) 推荐(0) 编辑