简单的记录
ZXLS-ZMR
我喜欢编程喜欢学习新的知识
展开
-
威佐夫博弈-取石子
其实我也不太了解这个这个威佐夫博弈,定理的证明也没去过多的了解,只知道,它是一个数列,表示在这两个数一组的一种情况,如,(1,2),(3,5),(4,7).....中表示了先取的败局,可以用一个黄金分割点来刻画。具体要认懂,去看别人的分析吧,对于学习编程的人,没必要去个个弄懂,这么多理论,要弄懂,并非易事,我们只要知道有这么一回事就行了,怎么用代码去实现它,就ok了。#include原创 2013-04-20 19:20:19 · 937 阅读 · 0 评论 -
HDU-3835 R(N)
很简单,直接枚举,就行了。#include#include#include#includeusing namespace std ;int main(){ int n,m,x,ans; while(scanf("%d",&n)!=EOF){ if(n<0){ printf("0\n"); continue; } if(n==0){ p原创 2013-10-08 17:06:15 · 1039 阅读 · 0 评论 -
CodeForces 300A Aarry
三个集合,第一个是所有的元素乘积小于零。第二个所有元素成绩大于零,第三个等于零。先把元素归类,只要判断第一个集合奇偶就行了。#include#includeusing namespace std ;int a[105],b[105],c[105];int main(){ int i,n,e,h,k,num; while(scanf("%d",&n)!=EOF){原创 2013-10-08 17:03:10 · 695 阅读 · 0 评论 -
HDU-1002 大数A+B
这道题是模拟加法的,没什么难度。#include#includechar st1[1005],st2[1005];int st3[2005];void Add(){ int i1=strlen(st1)-1,i2=strlen(st2)-1; int carry=0,tmp,i,j=0; for(;i1>=0&&i2>=0;--i1,--i2,++j){ tmp=st原创 2013-07-25 10:04:20 · 710 阅读 · 0 评论 -
HDU-1058 Humble Numbers
最近自己感觉动态规划这方面太差,就在各大oj上找了一些基础的dp题来A啊。这个dp题,虽说是入门的。但对于我,也有些棘手啊!1-->12--->min(1*2,1*3,1*5,1*7)---->23--->min(2*2,1*3,1*5,1*7)----->34---->min(2*2,2*3,1*5,1*7)----->4;5---->min(2*3,2*3,1*5,1*原创 2013-07-17 10:14:42 · 683 阅读 · 0 评论 -
HDU-2563.统计步数
这题是递归加模拟。用L[i]表示i个步伐向左走走的次数,用R[i]表示。。。想右走走的次数。f[i].....总共的方案次数。 向左走 L[i]=L[i-1]+f[i-1] R[i]=R[i-1]+f[i-1] f[i]=f[i-1]+L[i-1]+R[i-1] 参考代码:#includeint m原创 2013-07-15 19:44:26 · 864 阅读 · 0 评论 -
HDU-4475
题目连接分析:这题递推关系很简单。f(n)=2*n*f(n-1);记得要优化。代码:#include#define mod 1000003int a[1000005];void init(){ long long j=1; for(int i=1;i<1000005;i++) { j=(j*2*i)%mod; a[i]=j; }}int main()原创 2013-06-08 21:20:39 · 779 阅读 · 0 评论 -
HDU-1856,并查集
刚学并查集,这题还TLE几次了。关键是没优化。代码:#include#define N 10000001int father[N];int sum[N];int find(int x){ return x==father[x]?x:find(father[x]);}int main(){ int t,max,n,m,i; while(scanf("%d",&t)!原创 2013-05-29 21:27:15 · 713 阅读 · 0 评论 -
HDU-1213并查集
基础题。用来增强信心。代码:#includeint father[1005];int find(int x){ return x==father[x]?x:find(father[x]);}int main(){ int t,a,b,n,m,ans,i; scanf("%d",&t); while(t--){ ans=0; scanf("%d%d",&a,&原创 2013-05-29 20:23:55 · 663 阅读 · 0 评论 -
判断两个double的值
判断两个double型是否相等,不能用判断int型的方法去比较,这也是对初学者容易出现的错误,刚开始我在做POJ1730那个题目时候,就犯了这样的毛病。做出来的答案总是错的。因为我用double a,double b,if(a==b)...这样就是错的,后来在网上看了别人的代码才知道,比较两个double型:fabs(a-b)对POJ1730的题目,是要我们求a^b=c;求满足该等式下,b原创 2013-04-19 19:48:29 · 1085 阅读 · 0 评论 -
集合A-B--二分查找
集合A-B的意思是,元素在A且不在B中。这道题显然不是什么难题。个人水平有限,我喜欢分析这样的水题,这对我个人来讲,有助于培养思维能力,再难的题也是有简单的题复合在一起组成的。这题有两种方法,一是直接枚举,而是二分查找。显然枚举只对小数有可以,时间复杂度为(n^2)而二分查找先要排序,后查找,时间复杂度为2nlogn,显然我们会采用第二中方法。输入n,m代表集合A,B元素的个数,接下来原创 2013-04-24 19:10:38 · 1919 阅读 · 0 评论 -
简单的gcd函数
这道题是小菜一碟。利用辗转相除法和递归就能得出来了。学会用递归,它的优点就是代码特简略。#includeint gcd(int x,int y){ return x%y?gcd(y,x%y):y; }int main(){ int a,b; while(scanf("%d%d",&a,&b)!=-1) { if(a>b) printf("%d原创 2013-04-17 20:58:06 · 2697 阅读 · 0 评论 -
二分查找
二分查找的思路:对一个有序的数列,给我一个数k,我都可以把这个序列分成二分,即在这两边存在一个大于该数k,一个小于该数。这就相当于猜数字,你出一个数字,让我猜,对于我给的答案,你只要告诉我比该数大,还是小,或相等。我就可以一次判定该数的范围,最终找到答案,这个类似以优选法,但那并不是猜中间的,而是根据黄金比例猜的,也叫0.618法,这个数很神奇,斐波拉契数列的通式也有一这样的数(√ 5 -1)/2原创 2013-04-21 16:23:47 · 736 阅读 · 0 评论 -
HDU-3833 YY's new problem
先做了一下,超时了。很纠结,看别人说用hash表,果然A了。#include#include#includeusing namespace std ;int n;int a[10005],hash[10005];bool Judge(){ int mid; for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ mid原创 2013-10-08 17:10:04 · 1026 阅读 · 0 评论