- 博客(44)
- 资源 (8)
- 收藏
- 关注
原创 hud_2037-今年暑假不AC
/* 题目大意:给出节目的开始和结束时间,求最多能看多少完整节目 * 解题思路:首先按节目时间排序,因为必须是完整节目,所以要选取上一节目结束后 * 最早开始并尽快结束的节目。 */#include #include #include using namespace std;#define MAX 101struct node { int x, y;} a[MA
2013-02-21 15:57:26 1694
原创 hdu_1051-Wooden Sticks
/* 题目大意:将木棍分堆,保证每堆木头的长度和重量都是非递减的,最少分几堆 * 解题思路:将木头按长度非递减排序,然后从第一个开始将重量能组成非递减的木棍分堆即可 */ #include #include #include using namespace std;#define MAX 10002struct node { int x, y;} a[MAX];
2013-02-21 15:40:33 1663
原创 hdu_1052-Tian Ji -- The Horse Racing
/* 题目大意:田忌赛马 * 解题思路:这个题主要是想清楚怎样的比较方式能够将优势最大化 */#include #include #include using namespace std;#define MAX 1001int a[MAX], b[MAX];bool cmp(int a, int b){ return a > b;}int
2013-02-20 09:39:15 1710
原创 hud_1050-Moving Tables
/* 题目大意:在楼道中移动桌子,每次只能过一张桌子,求最短时间 * 解题思路:因为移动桌子的时间是一样的(不论远近),所以移动桌子 * 的最短时间和移动路径重合的最大次数有关(只能过一个),然后注意(1和2)、 * (3和4)。。。房间其实是一样的。 */#include #include #include using namespace std;#d
2013-02-20 09:21:23 1577
原创 uva_532-Dungeon Master
/* 题目大意:输入一个三维迷宫,S为起点,E为终点,求S到E的最小步数 * 解题思路:就是比二维迷宫多了一维,解法还是一样的,直接BFS水过。需要注意的是三维坐标是的数组是Z,X,Y */#include #include #include #include using namespace std;#define MAX 31#defin
2012-11-27 18:33:00 1627
原创 uva_439 - Knight Moves
/* 题目大意:告诉你国际象棋中马的初始位置和目标位置,算出它的最小步数 * 解题思路:首先要得知道国际象棋的马如何行动,幸好我玩过,它比中国的马 * 多走一格,也就是走‘目’字,然后枚举出马的行动方向,用BFS计算出最小步数。*/#include #include #include #include using namespace std;#define
2012-11-25 21:16:28 1606
原创 uva_705-Slash Maze
/* 题目大意:输入一个由'/'和'\'组成的迷宫,判断它有无环路,如果有,输出 * 环路数与最大环路的大小,如果没有,输出 “There are no cycles.” * 解题思路:刚开始看到这道题,没一点思路。。。然后想了一晚,想到一个很 * 笨的方法,结果越写越复杂。。。最后还是去网上找了个思路,用3*3的矩阵表示两种 * 斜线: * /: 001
2012-11-25 17:26:53 1690
原创 uva_784-Maze Exploration
/* 题目大意:X为迷宫的墙壁,将*能走到的位置标记为#, * 最后输出标记后的迷宫。 * 解题思路:直接DFS水过*/#include #include #include using namespace std;#define DIR 4#define MAX_ROW 31#define MAX_COL 81char
2012-11-24 17:27:57 1635
原创 uva_657-The die is cast
/* 题目大意:找到由*号组成的区域,然后记录里面X的数量, * 上下左右相连算一个,然后排序输出。 * 解题思路:因为既要找*号,又要找X,一个DFS解决不了 * 所以需要用两个DFS解决。 * PS:这道题做得还真是纠结,10A。。。,英语太差还真是不行, * 开始先少输出一个空行,然后又是没看到需要排序,最后竟然 * 发现题目意思都理解错了。。。。总
2012-11-24 17:21:27 1627
原创 uva_572 - Oil Deposits
/* 题目大意:一块区域中分布着油田,连在一起就属于一个油田,求油田个数。 * 也就是求一个无向图的连通分支个数,直接dfs8个方向,水过。。。*/#include #include #include using namespace std;#define MAX 101#define DIR 8char a[MAX][MAX];int visited[MAX][MAX];
2012-11-22 13:39:00 1797
原创 uva_699-The Falling Leaves
/**题目大意:先序建立二叉树,求同一垂直线上叶子节点之和。 *模拟先序建立二叉树过程,用数组保存值,数组下标代表垂直坐标求解 */#include #include using namespace std;struct Node { int v, pos; Node *lc, *rc;};#define MID 81int a[MID*2];int p
2012-11-19 12:31:23 1537
原创 uva_327-Evaluating Simple C Expressions
/**这道题貌似是一道用树解决的题,但是我一直没想到怎么用比较 *好,反而是数组的方法一下就想到了。。。具体思路是: * 1.记录计算结果时字母的值 * 2.记录操作符 + 或 - * 3.如果是 ++ 或 -- 标记与之相连的字母,最后改变该字母值 */#include #include #include using namespace std;#define VAL
2012-11-17 21:44:39 1803
原创 Codeforces_9D-How many trees?
/**题目大意:给定1~n各节点,建立二叉搜索树,求树的深度大于等于h的个数 *本题纠结一天未果,最后根据某大牛的思路写来了。 *状态转移方程: dp[n][h] = sum{dp[i][h-1] * dp[n-i-1][h-1]}; *其中: n为数的节点数, h数的深度, dp[n][h]为以n个节点建立的深度不大于 *h的树的个数; i为左子树的节点数, n-i-1为右子树的
2012-11-16 02:06:54 2090
原创 uva_548-Tree
/**中序,后序建树,然后遍历,求根到叶子的最小和,输出 *该叶子节点,关于通过二叉树建树问题,本博客有相关讲述。。。 */#include #include #include using namespace std;struct Node { int v; Node *lc, *rc;};#define MAX 10001#define MAXN 7000
2012-11-16 01:48:38 1823
原创 uva_712-S-Trees
/**先一看题就被吓一跳,到后面才发现题目不怎么难, *就是给出一个不超过8层的满二叉树,然后0往左走,1 *往右走,输入x1,x2……xn(n=depth) */#include #include #include using namespace std;#define MAX 1024char ans[MAX], str[MAX], search[MAX], x[MAX]
2012-11-16 01:44:41 1841
原创 uva_297-Quadtrees
/**总共是1024像素,递归建立4叉树,然后统计黑格子数量即可 *解决,我这里是模拟建立4叉树,能达到同样的效果,而且能 *节省一点时间和空间 */#include #include #include using namespace std;#define MAX 1024#define POS 4bool a[MAX+2];void pre_create_tree(
2012-11-16 01:35:04 1555
原创 uva_10404-Bachet's Game
/**博弈题。。这种题目的特点就是——想到方法后很简单,想不到 *就做不出了。。开始想穷举法列出所有结果,后来发现数据量太大 *行不通,后来看了看博弈相关东西,突然灵光一闪,想到只考虑当前 *步,把总数为1~count时先手的输赢标记起来,方程为: * if(i-a[i] == 0 || !num[i-a[i]](i-a[i]>0)) 先手赢 *就是刚好一次可以移动完,或者移动一次后,
2012-11-15 08:48:45 1869
原创 uva_112-Tree Summing
/**这道题的难度在于建树,因为输入可能不在一行,所以不能用字符串接收 *必须一个一个读,我这里是用getchar(),(当然scanf也行),每次读取到 *‘(’时,开始接收数据,如果是‘)’,子树为空,否则的话就是数字(可能是 *负数),这里有一个注意的地方就是空格,也坑了我很久,当时没有想到windows *和linux的差异,最后用库函数isspace解决。。。 */#incl
2012-11-15 08:35:31 1506
原创 hdu_1054-Strategic Game
/**树形DP,推出状态转移方程: *不选择当前节点: * dp[i][0] += dp[Node[i].son[j]][1]; *选择当前节点:(最后加上1(它本身)) * dp[i][1] += min(dp[Node[i].son[j]][1], dp[Node[i].son[j]][0]) *叶子节点处理: * dp[][0] = 0, dp[][1] = 1*/#i
2012-11-13 01:11:31 1682
原创 图的两种结构(邻接矩阵、邻接表)DFS、BFS算法
#include #include #include #include #include using namespace std;#define MAXSIZE 20bool flag = false;class MGraph{public: MGraph(int vertex, int side); ~MGraph(){}; void DFSTraverse(i
2012-11-12 18:47:37 2557
原创 最长单增子序列
#include #include using namespace std;#define MAX 1001int a[MAX], b[MAX];int main(int argc, char const *argv[]) { int cnt, ans(0); scanf("%d",&cnt); for(int i=0; i<cnt; i++){
2012-11-08 19:34:21 703
原创 uva_10115-Automatic Editing
/**本题含义是将前一个串转化为后一个串,当前一个串 *完全找不到后,再去比较下一个串,直到所有串被替换完毕 */#include #include #include using namespace std;#define MAX 256//替换void replace(char *a, char *b, int pos) { for(int i=0; i<strle
2012-11-08 12:41:01 518
原创 uva_10815-Andy's First Dictionary
/**本题的意思就是统计文章中的单词并排序 *且忽略其大小写,相同的单词只输出一次 */#include #include #include #include using namespace std;#define MAXL 201#define MAXW 2001char str[MAXW],*word[MAXW];int pstrcmp(const void *a,
2012-11-08 12:30:24 707
原创 uva_340 - Master-Mind Hints
/**本题的意思是,对应相等的为强,不对应相等的为弱, * 我的做法是每次比较时复制一个目标串,把他和输入的 *串对比,统计对应相等的,然后把值赋为-1,然后再统计不 *对应相等的 */#include #include #include using namespace std;int main(int argc, char const *argv[]){ int cas
2012-11-08 12:26:33 517
原创 uva_10420-List of Conquests
/*就是一个结构体计数加排序*/#include #include #include #include using namespace std;#define MAXL 2001#define MAXC 76typedef struct{ string name; int num;}Country;char s[MAXC];Country country[MAXL]
2012-11-08 12:20:35 722
原创 uva_10010-Where's Waldorf?
/**这里采用暴力法,首先将所有大写字母转化为小写,然后遍历整个矩阵, *搜索8个方向,获得搜索到的字符串,然后与目标字符串 *对比,如果搜索到的字符串前面包含目标字符串,则找到该串,输出位置 */#include #include #include #include using namespace std;#define MAX 200#define DIR 8char
2012-11-08 12:14:47 667
原创 uva_10361-Automatic Poetry
/**本题看懂题意就好解决了,就是把括号去掉输出一次, *然后交换字符串再输出一次 */#include #include #define MAXS 6#define MAX 101int main(int argc, char const *argv[]){ char c,s[MAXS][MAX]; int n,i,j,l; scanf("%d",&n
2012-11-08 12:06:28 458
原创 uva_108 - Maximum Sum
/** * 首先计算每一列的前序和(即0行到所有行上值的总和) * 其次,最大的子矩阵一定在a行和b行之间,所以我们可以枚举所有的可能组合,时间复杂度为O(N*N) * 因为我们在第一步中计算了前序和,那么第二步中a行和b行之间的子矩阵可以看成一个一维的数组,长度为N。 * 其值的计算可以利用第一步中的前序和,遍历所有列,让0-b的总和减去0-a的总和,即为a-b的总和。 *
2012-11-01 16:25:59 441
原创 uva_101 - The Blocks Problem
/**模拟题,难点在于看懂题目。。弄懂 move pile onto over 的意思就好办了*/#include #include #include using namespace std;#define MAX_BLOCK 25list blocks[MAX_BLOCK]; //块堆list::iterator current_pos, goal_pos, tmp_cur
2012-10-31 21:09:19 383
原创 uva_102 - Ecological Bin Packing
/**本题是求最少移动次数,即比较第一个箱子中的相同颜色瓶子数量,不移动瓶子最多的那个, *然后在剩余两个箱子中继续应用这个法则,最后得出总计6种移动顺序, *将6种情况的序列和最终箱子分别存放瓶子的颜色字符串定义为结构体并列举出来, *然后算出移动次数最少和颜色字符串的字典序最小的情况 */#include #include #include using n
2012-10-31 02:02:46 882
原创 uva_100 - The 3n + 1 problem
/**这道题有一个陷阱,那就是输入的闭区间不一定是ab,而且输出时的闭区间顺序要和输入的顺序一样*/#include #include using namespace std;int fun(int n) { int num(1); while(n>1) { num++; if(n%2!=0) {
2012-10-30 21:35:48 545
原创 大数加法、减法、乘法、除法、求余、比较、乘方(代码简短(总计150)、易懂)
前言: 大数的操作大部分人都知道,而且网上也有许多代码,但是那些大多比较冗长,吓到了许多同学们。。。所以特意写了个比较简短易懂的代码,代码基本上没问题,不过只支持正整数的输入数据。样例:12345 12add:12357subtract:12333multiply:148140devide:1028 remainder:9power:12528328
2012-10-27 16:10:57 2794 2
原创 时间复杂度的差异测评!O(n)、O(nlogn)、O(n^2)、O(n^3)以最长子段和为例
时间复杂度的差异测评前言:大家都知道,判断一个算法够不够好,一个很重要的标准就是算法的时间复杂度 ,同样一个问题,不同的算法执行的时间差异可以很大!这个就是时间复杂度导致的,关于时间复杂度的定义等,本菜鸟不予说明,大家可以参考各大算法或者数据结构书籍,里面有详细的解释,今天给大家带来的是不同时间复杂度算法运行时间的差异!测试题目:输入一个数据n(0,1000000),然后输
2012-10-24 13:58:51 5400 1
原创 scanf和cin的巨大差异!!!(ACmen必看!)
scanf和cin的差异大家都知道,在C++中有两种输入、输出方式—scanf和cin,但是,它们之间存在的差异,你们知道么?下面请看测评吧!测试题目:输入n个数,输出n个数。测试环境:ubuntu12.04 i3CPU 4G内存 7200转硬盘测试代码:(为了测试结果的正确性,保持其他部分(除输入输出)一样)scanf的代码:#in
2012-10-24 12:08:43 2789 3
原创 建立哈夫曼树,求哈夫曼编码
/*建立哈夫曼树,就是每次从所有节点中选取两个权值最小且没有父亲的节点 *然后用这两个节点作为新节点的两个子树,新节点的权值等于两子树之和 *重复这个操作直到所有总节点数等于2*n-1 **/#include #include #include using namespace std;typedef struct node{ int weight; int p
2012-10-21 12:10:53 992
原创 二叉树,已知先序和中序求后序,已知后序和中序求先序
/*根据二叉树的前序序列和中序序列建立该二叉树。这个过程是 *一个递归过程,其基本思想是:先跟据前序序列的第一个元素建立 *根节点,然后在中序序列中找到该元素,确定根节点的左、右子树的中序序列; *再再前序序列中确定左、右子树的前序序列;最后由左子树的前序序列与中序序列 *建立左子树,由右子树的前序序列与中序序列建立右子树。 *(由后序和中序建立二叉树的思想与上面类似) */#inc
2012-10-19 16:07:09 1008 1
原创 非递归遍历二叉树(先序、中序、后序、层序)
/*递归算法虽然简洁,但一般而言,其执行效率不高 *所占用的空间与运行的时间都比非递归算法多 *在这里把二叉树非递归遍历(先序、中序、后序、层序)实现(使用了栈和队列) *这里我们约定:空的节点用#表示,按照前序遍历来创建树!*//****************测试数据************************* please input BiTree for PreOrder
2012-10-19 13:45:23 964
原创 n皇后问题递归算法(回溯法)
/*n皇后问题递归算法*/#include #include #include using namespace std;#define QUEEN 8 //皇后个数#define MAXR (QUEEN+2) //棋盘大小char chess[MAXR][MAXR]; //定义一个棋盘int count = 0; //总摆放方法//初始化棋盘void init
2012-10-18 22:00:18 1635
原创 递归求集合子集(两种方法实现(数组,链表))
方法一:#include#define N 6char b[]= {'a','b','c','d','e','f'};int a[N+1];void find(int t) { int i,j; if(t <=0) { printf( "\n < "); for( i=1; i <=N; i++) { i
2012-10-18 18:01:01 983
原创 求最长子串(后缀数组解法)
/*求一串字符串的最长子串(后缀数组问题)*/#include #include #include #include using namespace std;#define MAXS 1001char s[MAXS], *a[MAXS];/*字符串比较(按字典序)*/int pstrcmp(const void *a, const void *b){ re
2012-10-18 14:17:29 531
超越TextMate!的编程神器! Sublime Text 2.0.1
2012-10-23
算法艺术与信息学竞赛pdf版
2012-10-19
JavaScript+css+html手册
2012-10-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人