ACM
文章平均质量分 67
Paradise_for_why
这个作者很懒,什么都没留下…
展开
-
getchar、getch区别与用法
转自http://blog.csdn.net/liurenzhong2008/archive/2008/11/11/3277589.aspx 先看看规范点的说法: getchar This is a standard function that gets a character from the stdin. getch This is a原创 2010-05-11 19:46:00 · 864 阅读 · 0 评论 -
NOJ1267 N皇后(非位运算)
<br />/*NQueen问题如果用简单的条件(即每次准备在第i行上找摆皇后的位置的时候,就从第i行的第0列到第n列<br />依次找符合条件的点(看和前面已经摆好皇后的i-1个皇后比较,看是否在同一列上是否在同一主对角线或<br />者副对角线上))搜索,这个过程耗时较多。解决方法:每放一个皇后,就将该皇后所在位置的列号作为<br />lie[]数组的下标,并将lie数组的该元素置为1,因为在矩阵中的特性(平行于主对角线的直线上的点的<br />横、纵坐标之差为定值(这边要加上n,因为数组下标没有负数)原创 2010-08-06 10:27:00 · 561 阅读 · 0 评论 -
NOJ1005 打导弹(广搜、队列)
<br />这个代码里面用的是标准队列的基本运算,所以前面定义对的基本运算的代码比较长,其实真正核心算法还是比较简单的。大家如果不想让代码显的这么长的话,可以用数组实现队列的基本运算,那这个代码就短多了哟~只是我只要在代码库里面把队列运算代码拷过来就行,那是用起来就很方便了的~<br /> <br /> <br />#include<stdio.h><br />#include<stdlib.h><br />typedef struct<br />{int data;<br /> int pos;<br /原创 2010-08-06 10:32:00 · 521 阅读 · 0 评论 -
NOJ1079 数塔问题
<br />#include"stdio.h"<br />#include"stdlib.h"<br />int gcd(int j,int k)<br />{<br /> if (j<k) return gcd(k,j);<br /> else if (k==0) return j;<br /> else return gcd(k,j%k);<br />}<br />main()<br />{int T,a[1000],b[1000],c[1000],d[1000],e[1000],f[1原创 2010-08-06 10:45:00 · 474 阅读 · 0 评论 -
POJ1088 滑雪
<br />#include<stdio.h><br />#include<stdlib.h><br />int R,C,max,a[100][100]={10001},b[100][100];<br />int DFS(int sx,int sy)<br />{<br /> int i,x,y,tmp,dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};<br /> if(b[sx][sy])<br /> return b[sx][sy];<br /> b[sx][sy]=1;<原创 2010-08-06 10:49:00 · 517 阅读 · 0 评论 -
HDU1002 高精度加法
<br />这个一定要注意输出格式的问题,尤其是回车符的输出~<br /> <br />#include<stdio.h><br />#include<string.h><br />#include<stdlib.h><br />char a[1001],b[1001];<br />int c[1001],d[1001],jin[1001],res[1002];<br />int main()<br />{<br /> int i,j,k,T,lena,lenb,max,min,flag,u=0;<br /原创 2010-08-06 10:50:00 · 805 阅读 · 0 评论 -
HDU 1072 Nightmare(类似可以回走且能加时的迷宫)
<br />#include<stdio.h><br />#include<string.h><br />#include<stdlib.h><br />typedef struct<br />{<br /> int time;<br /> int x;<br /> int y;<br />}node;<br />typedef struct<br />{node pos_mes[100];<br /> int front,rear;<br />}sequeue;<br />sequeue *q;<br /原创 2010-08-06 10:52:00 · 586 阅读 · 0 评论 -
HDU1466 计算直线交点(输出各种交点方案)
<br />#include<stdio.h><br />#include<stdlib.h><br />int a[21][191];<br />int main()<br />{<br /> int i,j,k,sum,p,q,n;<br /> a[0][0]=1;<br /> a[1][0]=1;<br /> a[2][0]=1;<br /> a[2][1]=1;<br /> for(i=3;i<=20;i++)<br /> {<br /> for(j=0;j<i;j++)<br /> {<br原创 2010-08-06 10:53:00 · 1199 阅读 · 1 评论 -
POJ2377 (详解) 用并查集实现最大生成树(速度较快)
<br />#include<iostream><br />#include<stdlib.h><br />using namespace std;<br />const int Max = 30050;<br />int pa[Max], num[Max], under[Max]; <br /> // num[x]用于根节点x记录集合的元素数量,集合其他元素的num[]以后不会用到。<br /> // under[x]用于记录集合元素x与根节点元素的位置差值,由于根节点的under[]为0,<br原创 2010-08-08 18:03:00 · 620 阅读 · 0 评论 -
POJ1125 Stockbroker Grapevine(最短路径——Floyd算法)
<br />#include <iostream><br />using namespace std;<br />int n,i,j,k,q,t,map[200][200];<br />int main()<br />{<br /> cin >> n;<br /> while (n != 0)<br /> {<br /> for (i = 1;i <= n;i++)<br /> for (j = 1;j <= n;j++)<br /> map[i][原创 2010-08-10 19:56:00 · 733 阅读 · 0 评论 -
POJ2236 Wireless Network(并查集)
<br />这个题并不难,就是并查集的运用,下面的程序是正确的~<br />但是里面的红色代码部分应该可以用break来进行优化剪枝的,这样运行时间会短一些,但是不知为什么如果加上break运行结果就不对了的,如果有哪位高手知道了的话请告诉我一下哟~先谢谢喽O(∩_∩)O~<br /> <br /> <br />#include<iostream><br />using namespace std;<br />const int Max = 1005;<br />struct data<br />{<br原创 2010-08-09 14:34:00 · 631 阅读 · 0 评论 -
Dijkstra和Floyd算法
<br />Floyd算法:<br />如果要求所有两结点间的最短路径,则可以使用dijkstra算法n次完成,时间复杂度是<br />O(n^3),Floyd还提出过另一个算法,同样是O(n^3)的复杂度,但形式上更简单些。<br /> 要求的解是一个矩阵S[N][N],其中S[i][j]表示结点i到j的最短路径,算法很像动态<br />规划算法,甚至更简单些,不同的是这里规划的是一个矩阵,而不是简单的数组。<br />Floyd算法过程描述如下:<br />(在整个循环结束后,S[i][j]肯定是i和原创 2010-08-11 19:14:00 · 3269 阅读 · 0 评论 -
HDU1078 FatMouse and Cheese(DP&非DP)
<br />先来DP的代码O(∩_∩)O~<br /> <br />/*自顶向下的分析,自底向上的求解*/<br />#include<stdio.h><br />int n,k;<br />int map[101][101],dp[101][101];<br />int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};<br />int DFS(int x,int y)<br />{<br /> int i,j,nx,ny,t,max=0;<br /> if(dp[x][y]!原创 2010-08-12 17:06:00 · 683 阅读 · 0 评论 -
HDU N皇后——高效方法详解(bit方法)
<br />N皇后的问题是回溯中一个非常非常经典的例子,但是一般大家都是按普通方法去回溯搜索,在14皇后或更大的皇后数时,那种方法耗时太大。这边向大家提供一个高效的算法,通过位运算来实现N皇后~<br /> <br /> <br />// 试探-回溯算法,递归实现<br />//sum用来记录皇后放置成功的不同布局数;upperlim用来标记所有列都已经放置好了皇后。<br />#include<stdio.h><br />#include<stdlib.h><br />long sum = 0, uppe原创 2010-08-06 10:25:00 · 805 阅读 · 0 评论 -
POJ2377 用并查集实现最大生成树(速度较快)
<br />#include<iostream><br />#include<algorithm><br />using namespace std;<br />#define SIZN 1001<br />#define SIZM 20001<br />typedef struct node{<br /> int u,v,w;<br />}edge;<br />int p[SIZN];<br />edge e[SIZM];//边集数组<br />int rank[SIZN];<br />int to原创 2010-08-08 15:09:00 · 2216 阅读 · 0 评论 -
NOJ 1149高精度乘法(另含高精度加、减&除详解)
<br />#include <iostream><br />using namespace std;<br />const long MAXN = 100000;<br />inline long& len(long* a)<br />{<br /> return a[MAXN-1];<br />}<br />void copy(long* to, long* scr)<br />{<br /> len(to) = len(scr);<br /> memcpy(to,scr,sizeof(long)*le原创 2010-08-06 17:19:00 · 738 阅读 · 0 评论 -
快排函数
七种qsort排序方法 一、对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 二、对char类型数组排序(同int类型) char word[100]; Sam转载 2010-05-16 18:45:00 · 720 阅读 · 0 评论 -
ACM之八大输入输出格式
<br />第一种:A+B for Input-Output Practice (I)<br />【输入】有多组输入数据,但没有具体的告诉你有多少组,只是让你对应每组输入,应该怎样输出。<br />【输出】有多组输出,对应着每组输入,每组输出占一行。<br />【代码】对于上述常见的情况,我们可以用下面的代码来解决。<br />没有告诉我们有多少组,我们只需要等待即可:while (scanf (……) != EOF)<br />相对应输入,输出只需要在while中输出。【完整代码】<br />第二种:A+转载 2010-07-25 22:17:00 · 1038 阅读 · 0 评论 -
关于qsort中的cmp函数(网上摘录)
<br />int cmp(const void *a, const void *b)<br />返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 0, 那就无所谓谁前谁后..<br />下面就把snoopy曾经写的介绍qsort的完整版贴出来好了,我想有与我一样经历的朋友也可以弄懂的:<br />很多人问这个东西.我以前也看了好久,今天翻到以前学快排的时候写的练习code,基本上<br />能覆盖绝大部分用法了.<br /><br />里面有很多地方转载 2010-07-26 17:51:00 · 1020 阅读 · 0 评论 -
易懂的动归DP详解
<br />今天在网上看到一个讲动态规划的文章,是以01背包为例的,这文章和书上的讲解非常不一样,令我眼前一亮,于是转载一下下~~~<br />(说明一下,本人非常痛恨教材公式定理漫天飞,实际的讲解却讲得非常枯涩难懂,这种中国式的教育已经延绵了几千年了,现在中国的教材还是这个样子,讲清楚些明白些就那么难么?高中有个老师讲的一句话一直觉得很有道理:“教得会天才不是真本事,能把博士生的东西讲到小学生都会用那才是真水平。”)<br />附上原文地址:<br />http://www.cnblogs.com/sdj转载 2010-08-03 20:46:00 · 721 阅读 · 0 评论 -
0-1背包问题详解
<br /> <br />动态规划是用空间换时间的一种方法的抽象。其关键是发现子问题和记录其结果。然后利用这些结果减轻运算量。<br />比如01背包问题。<br />/* 一个旅行者有一个最多能用M公斤的背包,现在有N件物品,<br />它们的重量分别是W1,W2,...,Wn,<br />它们的价值分别为P1,P2,...,Pn.<br />若每种物品只有一件求旅行者能获得最大总价值。<br />输入格式:<br />M,N<br />W1,P1<br />W2,P2<br />......<br />转载 2010-08-02 20:01:00 · 1336 阅读 · 0 评论 -
NOJ1267 N皇后(非递归算法)
<br />这次没有采用一般的递归算法来实现N皇后,下面是非递归算法~<br /> <br />#include<stdio.h><br />#include<math.h><br />#include<stdlib.h><br />#define M 100<br />int l[M];<br />int check(int x,int l[])<br />{<br /> int i;<br /> for(i=1;i<x;i++)<br /> if(l[i]==l[x]||(abs(i-x)==abs(原创 2010-08-06 10:34:00 · 676 阅读 · 0 评论 -
NOJ1015 和GG一起回家
<br />#include<stdio.h><br />int D[100],P[100],S[100];<br />int N;<br />int DIJKSTRA(C,v)<br />int C[][100];<br />int v;<br />{<br /> int i,j,k,v1,pre;<br /> int min,max=10000,inf=10001;<br /> v1=v-1;<br /> for(i=0;i<N;i++)<br /> {D[i]=C[v1][i];<br /> if原创 2010-08-06 10:40:00 · 441 阅读 · 0 评论 -
只见MM一次
<br />这个是以路径为标准的~<br />#include<stdio.h><br />#include<string.h><br />int a[51][51];<br />int d[51];<br />int main()<br />{ int n,i,j,flag;<br /> while(scanf("%d",&n)==1)<br /> { for(i=1;i<=n;i++)<br /> for(j=1;j<=n;j++)<br /> scanf("%d",&a[i][j]);<br原创 2010-08-06 10:42:00 · 463 阅读 · 0 评论 -
NOJ1021 背包问题
<br />DP中的经典~<br /> <br />#include<stdio.h><br />#include<stdlib.h><br />int w[110],p[110],c[110][1010]; ;<br />int knapsack(int m,int n)<br />{ <br /> int i,j;<br /> for(i=1;i<n+1;i++)<br /> for(j=1;j<m+1;j++)<br /> {<br /> if(w[i]<=j) <br /> { <br原创 2010-08-06 10:43:00 · 644 阅读 · 0 评论 -
NOJ1081 合并石子
<br />#include<stdio.h><br />#include<stdlib.h><br />int m,n,N,A[10000];<br />int cmp(const void *a ,const void *b ) <br />{ <br /> return *(int *)b-*(int *)a; <br />}<br />long int f()<br />{<br /> int k,t;<br /> long int sum=0,sum1=0;<br /> qsort(A,n,siz原创 2010-08-06 10:45:00 · 457 阅读 · 0 评论 -
POJ1088 滑雪
<br />#include<stdio.h><br />#include<stdlib.h><br />int R,C,max,a[100][100]={10001},b[100][100];<br />int DFS(int sx,int sy)<br />{<br /> int i,x,y,tmp,dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};<br /> if(b[sx][sy])<br /> return b[sx][sy];<br /> b[sx][sy]=1;<原创 2010-08-06 10:47:00 · 569 阅读 · 0 评论 -
HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】
<br />Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955<br /> 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋);<br /> <br /> 正确的方程是:f[j]=max(f[j],f[j-原创 2010-08-06 11:22:00 · 1188 阅读 · 0 评论 -
HDU1176 免费馅饼
<br />#include <stdio.h><br />#include <string.h><br />int DP[100003][11];<br />int max(int a,int b,int c)<br />{<br /> int m ;<br /> m=a ;<br /> m=b>m?b:m ;<br /> m=c>m?c:m ;<br /> return m ;<br />}<br />int main()<br />{<br /> int i,j,n,t,sum,x ;<br /原创 2010-08-06 15:08:00 · 589 阅读 · 0 评论 -
POJ1273 Drainage Ditches(网络流&增广路)
<br />/*PKU 1273 Drainage Ditches <br /> Edmonds-Karp Maximum Flow O(VE^2)*/<br />#include <cstdio><br />#include <queue><br />using namespace std;<br />const int N = 210;<br />int ad[N][N],flow[N][N];<br />int pre[N],inc[N];<br />int n,m;<br />bool BFS(原创 2010-08-13 13:54:00 · 690 阅读 · 0 评论