2012年10月20日
摘要: CODE:#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>usingnamespacestd;#defineMAXN25#defineINF0x3f3f3f3fintn,times;longlongd[MAXN][MAXN];voidinit(){for(inti=1;i<=20;i++){for(intj=1;j<=20;j++){if(i==j)d[i][j]=0;elsed[i][j]=INF;}}}voidFloyd(){intu,v; 阅读全文
posted @ 2012-10-20 21:58 有间博客 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 大意:给你一个图,以及出发点与起始点,让你求这两者之间的最小的最大权值。思路:动态规划,Floyd的变形,我理解起来比较困难,关键是我接触动态规划较少。CODE:#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>usingnamespacestd;#defineMAXN110#defineINF0X3F3F3F3Fintd[MAXN+10][MAXN+10];intn,m,q;voidinit(){for(inti=1; 阅读全文
posted @ 2012-10-20 21:40 有间博客 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 大意:使用最小连线使得所有给定的点连在一起。思路:最小生成树。CODE:#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>usingnamespacestd;#defineMAXN110#defineINF0X3F3F3F3Fstructnode{doublex,y;}a[MAXN];doublew[MAXN][MAXN],d[MAXN];intn;doubledist(nodea,nodeb){returnsqrt(( 阅读全文
posted @ 2012-10-20 16:46 有间博客 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 大意:判断一个字符串是否由给定的一些字符中两个组成。思路:可以用hash,也可以用字典树+枚举,字典树似乎比较快。CODE:#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>usingnamespacestd;#defineMAXN120010charsave[120010][30];structTrie{Trie*next[26];intvalue;Trie(){for(inti=0;i<26;i++)next[i]=0;value=0;}};voidi 阅读全文
posted @ 2012-10-20 16:28 有间博客 阅读(211) 评论(0) 推荐(0) 编辑
摘要: /*哈希函数的构造方法其实和建立邻接表的方法非常类似*/#include<stdio.h>#include<string.h>#include<stdlib.h>charst[121000][30],temp[30];intfirst[10000019],next[121000];voidinit(){memset(first,-1,sizeof(first));}inthash(char*key)//ELHhash{ULh=0;while(*key){h=(h<<4)+*key++;ULg=h&0xf0000000L;if(g)h^=g 阅读全文
posted @ 2012-10-20 11:57 有间博客 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 我只会用二分枚举,即sum(1,mid-1) == sum(mid+1, n) -->2*pow(mid, 2) == n*(n+1); 然后去网上看了看其他人是用打表的方式过去的,今天第一次接触了暴力打表。共同进步啊。由于我不知道最大数是多少,于是我将n的范围开到了一亿,反正也只要前十组,如果少了就增加n的范围。打表CODE:#include<stdio.h>#include<string.h>intmain(){freopen("UVA138.cpp","w",stdout);longlonginti,j,x,mid,y 阅读全文
posted @ 2012-10-20 11:36 有间博客 阅读(243) 评论(0) 推荐(0) 编辑