摘要:
题目链接http://poj.org/problem?id=3349题意是说,有n片雪花,每片雪花都是有6个角,给出每片雪花每个角的长度,问里面有没有一样的雪花(给出数据的顺序是没有确定的)。虽然使用了哈希查找表,却还是用了2400多Ms,但还是过了。这里采用hash数组作为表头,他的下标作为哈希值用于快速定位,next存放的是当hash下标相同时的另一个下标,把他们连接起来,可用于解决矛盾。如10个数a[]=(下标从1开始,之后会知道为什么)123456789 ,321654853 ,136977123 ,111234682 ,123458536222222222 ,454646546 ,7 阅读全文
摘要:
POJ3624Charm Bracelet(01背包)01背包看看《背包九讲》第一讲就没问题。http://wenku.baidu.com/view/e5fd2015b7360b4c2e3f6416.htmlView Code 1 #include<stdio.h> 2 int d[3405],w[3405]; 3 int n,m; 4 int ZeroOnePack() //01背包解法 5 { 6 int f[13000]={0},i,j; 7 for( i=1; i<=n ; i++ ) 8 { 9 for( j... 阅读全文
摘要:
(POJ2488)A Knight's Journey题目大意很明了,就是找到一个路径让马走完所有的点,不重复不遗漏;思路很容易找到,直接用DFS搜索标记并回溯,一个点一个点作为起点去试;找到后停止;虽然感觉很简单,做的时候却没那么容易==|| 下面是AC代码View Code 1 #inclu... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1010题目意思是从S走到D,看似很简单,dfs与bfs似乎都可以做出来,但题目却有一个要求,就是走过的点不能再走,而且并不是找最短路,而是找是否存在满足条件的走法。所以在这里就要用dfs标记的方法,走过之后消除标记才能考虑每一种情况。从其中找到是否有可以满足条件的走法。l代码如下: 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #define mem(a) memset(a,0,sizeof(a) 阅读全文
摘要:
上学期看到学长写了一个贪吃蛇,就一直想要做一个不同的游戏,当时觉得写出来并不是不可能,可还是因为能力有限,很多东西都不懂,就放弃了这个想法。这学期还没开始,就一直心想着编一个俄罗斯方块出来,可是当我真正开始的时候,才发现没有那么简单,什么头绪也没有就开始凭着感觉去写。大干花了两个晚上的时间写了大概有100~200行代码,再回过头来去看那个贪吃蛇的代码,发现自己写的完全什么用也没有。没办法只有全部删掉,先研究研究再从头开始。 在中途也碰到过很多问题,有一段时间就干脆不去管它,搁置了大概有一两周的时间,之后开始写才一点一点理清思路,写各种函数(由于对c++还算是没入门,只能用c语言写下去了),再. 阅读全文
摘要:
在枚举分类中已有暴力枚举的方法解这道题。之后在网上看到大神的高效算法,膜拜之。故copy在此。/*参考高手的高效解法:> 证明:要使一个为'+'的符号变为'-',必须其相应的行和列的操作数为奇数;可以证明,如果'+'位置对应的行和列上每一个位置都进行一次操作,则整个图只有这一'+'位置的符号改变,其余都不会改变.> 设置一个4*4的整型数组,初值为零,用于记录每个点的操作数,那么在每个'+'上的行和列的的位置都加1,得到结果模2(因为一个点进行偶数次操作的效果和没进行操作一样,这就是楼上说的取反的原理) 阅读全文
摘要:
由递推关系,到n-1时有一种走法,n-2时有2种走法,所以An=An-1+2*An-2 1 #include<stdio.h> 2 main() 3 { 4 int n,m,i; 5 double f[45]; 6 f[1]=f[2]=1; 7 for(i=3;i<=44;i++) 8 f[i]=f[i-1]+f[i-2]; 9 scanf("%d",&n);10 while(n--)11 {12 scanf("%d",&m);13 printf("%.0lf\n",f[m]);14 ... 阅读全文
摘要:
转自http://sbp810050504.blog.51cto.com/2799422/883904我一直想写一些关于图论学习的收获。一直由于这样或者那样的原因都没有开始。无论如何,现在开始吧!那么到底什么是图呢?我们这里说的图当然不是像照片一样的东东。最权威的定义:图=顶点集合+边集合。换言之,凡是能抽象成点集合和边集合的东 西都是图。比如:中国地图。地图上的城市是一个个的点,而任意两个相邻城市之间有路。那么地图就是很直观的一种图。为了更方便的表示,我们引入了英语单 词。Vertext(顶点),Edge(边),Graph(图)。不管什么图,就可以用G<V,E>表示了。 地图是一 阅读全文
摘要:
并查集 1 #include<iostream> 2 using namespace std; 3 4 const int MAX=1000; 5 int father[MAX]; 6 7 void initial(int n) //初始化 8 { 9 for(int i=1;i<=n;i++)10 father[i]=i;11 }12 13 int find(int x) //查找14 {15 while(father[x]!=x)16 x=father[x];17 18 return x;19 }20 21 void ... 阅读全文
摘要:
给出一个长度为n的序列A1,A2,A3,...An,求最大连续和。换句话说,要求找到1=<i=<j=<n,使得Ai+...+Aj尽量大。题目似乎很简单,但是在n非常大的时候(如n>10000)时,采用最习惯使用的暴力过的话似乎就有一些难度,下面逐步给出了几种方法,解决问题在可以解出来时,应该找求最优解方法一:枚举直接在i到j之间一一枚举。复杂度O(n^3) 1 #include<stdio.h> 2 int main() 3 { 4 int a[1000],n; 5 while(scanf("%d",&n)!=EOF) 6 { 7 阅读全文
摘要:
Description考虑将如此安排在一个 3 x3 行列中的九个时钟:目标要找一个最小的移动顺序次将所有的指针指向12点。 下面原表格列出了9种不同的旋转指针的方法,每一种方法都叫一次移动。 选择1到9号移动方法,将会使在表格中对应的时钟的指针顺时针旋转90度。 移动方法 受影响的时钟 1 ABDE 2 ABC 3 BCEF 4 ADG 5 BDEFH 6 CFI 7 DEGH 8 GHI 9 EFHI Example[但这可能不是正确的方法,请看下面]Input第1-3行: 三个空格分开的数字,每个数字表示一个时钟的初始时间,3,6,9,12。 数字的含意和上面第一个例子一样。Output 阅读全文
摘要:
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4255题目的数据是10000以内的,但是要建400*400的矩阵用一次bfs就可以完成 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 int ma[410][410]={0},vis[410][410],dist[410][410],mb[410][410];//mb储存数字,ma储存素数 5 int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1}; 6 int q[4 阅读全文
摘要:
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1312 1 #include 2 #include 3 #define mem(a) memset(a,0,sizeof(a)); 4 using namespace std; 5 const int MA... 阅读全文
摘要:
题目链接http://codeforces.com/problemset/problem/6/CAlice and Bob like games. And now they are ready to start a new game. They have placed n chocolate bars in a line. Alice starts to eat chocolate bars one by one from left to right, and Bob — from right to left. For each chocololate bar the time, needed 阅读全文
摘要:
输入n,输出满足条件的n*n皇后的排列以及总解数输入:64输出:2 4 6 1 3 53 6 2 5 1 44 1 5 2 6 35 3 1 6 4 242 4 1 33 1 4 22 1 #include<iostream> 2 using namespace std; 3 int n,tot; 4 int C[15]; 5 void print() 6 { 7 int i,ok=0; 8 for(i=0;i<n;i++){ 9 if(ok==0){cout<<C[i]+1;ok=1;}10 else cout<<" "<& 阅读全文