上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要: 题目链接:http://poj.org/problem?id=3468以前看过线段树,不过没看明白,也没做过这类题;这次一定要搞懂!!!再次看了两天的线段树,开始有点明白了,多谢媛神博客的支持。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 #define L(x) (x<<1) 6 #define R(x) (x<<1|1) 7 #define MID(x,y) ((x+y)>&g 阅读全文
posted @ 2012-02-27 12:30 我们一直在努力 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 转自网络:跳蚤题目大意是给定两个整数n和m,求出长度为n+1满足条件的数列data的个数,数列的要求下:1)1<=data[i]<=m,for1<=i<=n2)data[n+1]=m;3)这个n+1个数满足:存在x1,x2,...,xn,xn+1,满足x1*data[1]+x2*data[2]+...+x(n+1)*data[n+1]=1;根据数论的知识,若存在这样的x1,x2...xn+1,则data[1],data[2]...data[n+1]的最大公约数为1证明:若data[1],data[2]...data[n+1]满足题意,并且存在最大公约数d(为整数);则x 阅读全文
posted @ 2012-02-25 19:40 我们一直在努力 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1118一道简单的题却超时了半天,到现在我也不知道超时在了那里,都是n^3的复杂度,把判斜率相等化成了交叉相乘相减就过了。超时代码:View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<string> 6 using namespace std; 7 struct ss{ 8 int x,y; 9 }a[800];10 int 阅读全文
posted @ 2012-02-25 17:15 我们一直在努力 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1835这是一道模拟题,不过不是太好做,主要原因就是方向不好控制,三维空间,六个方向。 本题的关键就是要控制好头和脸的方向,利用打表的方法做(表中把所有的可能结果都列出来)。具体是:其中左转和右转要特别注意脸的方向(打表给出),头的方向是不变的。up其实就是脸的方向变成了头的方向,头的方向变成了脸原来的方向向后。down是头的方向变成了脸的方向,脸的方向变成了头原来方向的反方向。向后直接头不变,脸反向。View Code 1 #include<cstdio> 2 #include<iostream> 3 us 阅读全文
posted @ 2012-02-25 16:19 我们一直在努力 阅读(593) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1061 对于方程 a*x+b*y=n;有整数解得充分必要条件是(n %gcd(a,b)==0).这个定理这里就不证明了,数论书上都有。 所以方程 a*x+b*y=n;我们可以先用扩展欧几里德算法求出一组x0,y0。也就是a*x0+b*y0=gcd(a,b);然后两边同时除以gcd(a,b),再乘以n。这样就得到了方程 a*x0*n/gcd(a,b)+b*y0*n/gcd(a,b)=n;我们也就找到了方程的一个解。即x=x0*n/gcd(a,b) ;y=y0*n/gcd(a,b). 还有一个定理:若gcd(a,b)=1,且x0,y. 阅读全文
posted @ 2012-02-24 15:58 我们一直在努力 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 转载自笨小孩_shw 哎呀,经过这两三天的奋斗,终于搞懂了一类问题——用扩展欧几里德算法求解线性同余方程。其实这类问题应该是比较基础也比较简单的,但我由于几乎没有一点数论的基础,所以还是难为了我不久,等现在彻底搞明白以后再看真的觉得是挺简单的,有关这类问题的题目也不是很多,我就做了3个。下面把这类问题的资料整理一下,方便以后再看。欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,... 阅读全文
posted @ 2012-02-24 14:49 我们一直在努力 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 我的凸包,第一个自己写的凸包,花了两天时间终于把这个算法完全搞明白了,其中有点小纠结的就是我自己写程序是忘记了把最终结果四舍五入,一直不知道问题出在什么地方;其实这个算法不难理解,就是其中的那个左旋还是右旋的判断一直感觉不好实现,感觉不好证明。给个大牛的链接吧:http://www.cnblogs.com/devymex/archive/2010/08/09/1795392.html#include<iostream>#include<algorithm>#include<cstring>#include<cmath>using namespac 阅读全文
posted @ 2011-11-08 21:13 我们一直在努力 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 整数划分问题的一些证明NO.1在自然数n的所有二项分拆中,当n是偶数2m时,以分成m+m时乘积最大;当n是奇数2m+1时,以分成m+(m+1)时乘积最大。换句话说,把自然数S(S>1)分拆为两个自然数m与n的和,使其积mn最大的条件是:m=n,或m=n+1。这句话从小学开始就有很多版本,什么“给你一条绳子,周长一定,如何将围成的四边形面积最大”之类的问题都是这一个数学模型。证明:分两种情况讨论1.n为偶数。则原问题可以化为:对于一个自然偶数n,求证m*m>(m-1)(m+1)(m=n/2)显而易见,m*m>m^2-12.n为奇数则原问题可以化为:对于一个自然奇数n,求证m(m+1) 阅读全文
posted @ 2011-09-13 20:39 我们一直在努力 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 哎,郁闷 比赛时,WA了n多次,最终也没过,以为算法错了,可想来想去感觉没错啊!以给的最短距离为边建图,然后利用floyd算所有点之间的距离,如果i到j的距离经过k则标记i到j,最后如果i到j被标记了并且求的的最短距离等于原始的(即直连的)则可以把直连的删除即总边数减一。如果求的的距离小于直连标记 输出impossible。 原来是n个点的总边数m应该为n*(n-1); 当时不知道怎么搞成了m=2*n。View Code 1 #include <iostream> 2 #include<cstring> 3 #include<cstdio> 4 using 阅读全文
posted @ 2011-09-11 21:39 我们一直在努力 阅读(214) 评论(1) 推荐(0) 编辑
摘要: 题目大意:在无向图中求有s到t经过k条边的最短路(可以重复)。先说下二分矩阵相乘吧也就是所说的快速幂,它是利用了二分的思想比如2^6=(2^2*2^2)*2^2;2^7=(2^2*2^2)*(2^2*2^1);所以不管是奇数还是偶数都可以进行二分从而快速计算。这里也是利用了这个思想唯一不同之处是这里的矩阵相乘的三重循环换成了floyd,而且初始化有所不同,矩阵乘法初始化主对角线(i=j)是为1,其他为0,而这里是主对角线为0,其它为无穷大,其实想一下就可以明白了,你可以在纸上花花。View Code 1 #include<stdio.h> 2 #include<stdlib. 阅读全文
posted @ 2011-08-29 11:13 我们一直在努力 阅读(392) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页