
九度题解
对九度上面的题目根据自己的做法进行公开讲解与交流,保研时记录所用,欢迎指正。
kdzc
中科院程序员一枚,研究僧在读中,主要方向压缩感知,图像处理,和大家一起学习进步^_^
展开
-
九度1035 -树 - 找出直系亲属
这道题目一开始我还以为是并查集,后来发现比并查集简单的多,就是一个家谱树,然后找到两个节点之间的深度差。#includeint data[30]; void make_set(){ for(int i=0;i<30;i++) data[i]=-1;} int find(int a,int b){ int re=1; while(data[原创 2015-06-18 11:59:48 · 2259 阅读 · 1 评论 -
九度1022 -栈 - 游船出租
这题目我想到的是栈,当然感觉也是想多了,,#include#include#includeusing namespace std;double round(double r){ return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5);}stackdata[100];int sum;int num;int pre;void原创 2015-06-18 18:09:42 · 799 阅读 · 0 评论 -
九度1029 -map - 魔咒词典
这个题目就是为了练习map,因为有可能从key查找value,由value查找key两个情况,所以需要两个map,因为map只能从key查找value。同时也考验了字符串的处理。#include#include#include#includeusing namespace std; int main(){ mapmaps; mapmaps1; m原创 2015-06-18 20:11:36 · 1017 阅读 · 0 评论 -
九度1027 - 数学 - 欧拉回路
欧拉回路是指每条边恰好只走一次,并能回到出发点的路径。我们如何判断一个图有欧拉回路?一、无向图每个顶点的度数都是偶数,则存在欧拉回路。二、有向图(所有边都是单向的)每个节顶点的入度都等于出度,则存在欧拉回路。知道了这些,我们只要判断每个边的度数即可。#include#includeint du[1010];int main(){ int m,n,x,原创 2015-06-20 16:48:18 · 1286 阅读 · 0 评论 -
九度1475 - IP数据包解析(北邮)
这题目就是一个处理字符串的简单题目,但是一开始我没有用到IHL,还是考验了一些计网的知识的。我看到有一个人写的很简洁,所以贴他的代码,给大家看看。#include#includeint num(char *c){ // 字符转换为数字 if(*c>='0'&&*c<='9') return *c-'0'; else return *c-'a'+原创 2015-06-20 18:15:11 · 1083 阅读 · 0 评论 -
九度 1341 -图最短路径 - 艾薇儿的演唱会
这道题目检查对于dijkstra算法的掌握,如果对于这个算法有疑问的,可以看看这个博客点击打开链接,基本上已经讲得很清楚了。其实这种题目最难的不是这个算法,而是一些小细节。他的提示里有说:火车能从城市x到城市y,就能从城市y到城市x,并且同一列火车来回所花费的时间是一样的。如果在x和y之间有不止一辆火车通行,则不同火车从x到y或者从y到x所花费的时间可能不相同。 说明一个路线可能会出现两次原创 2015-06-26 15:12:41 · 1008 阅读 · 0 评论 -
九度 1411 -图最短路径 - 转圈
这道题目检查对于dijkstra算法的掌握,如果对于这个算法有疑问的,可以看看这个博客点击打开链接,基本上已经讲得很清楚了。这道题目的细节有:1:在给的有向图中,一条边会重复,所以我们要选最小的那条覆盖 2:有s-s的边。大家做的时候要小心这两个细节。dijkstra算法代码整体模板就是这个博客点击打开链接的。#include#include#define MAX 100000原创 2015-06-26 15:21:29 · 871 阅读 · 0 评论 -
九度 1201 -二叉排序数遍历- 二叉排序树
这个是道正统的树构建和遍历题,一开始还想用数组构建代替一下水过去,但是发现不行,只好老老实实的用指针了。二叉排序树和遍历方法如果不清楚定义的话,最好去看看数据结构书复习下。#includestruct node{ node *l; node *r; int val; node(int a):val(a),l(NULL),r(NULL){};};node原创 2015-06-26 21:15:55 · 1036 阅读 · 0 评论 -
九度 1107 - 霍夫曼树 - 搬水果
这道题目一开始我用排序来做,每次选择最小的两个,相当于构建了霍夫曼树,最后统计所有非叶子结点之和。但是因为每次排序的基数太大,所以会一直超时。所以我们用优先队列模拟一个堆,利用最小堆的特征来快速得到最小的两个数。STL带有优先队列-priority_queue。priority_queue 对于基本类型的使用方法相对简单。他的模板声明带有三个参数:priority_queue原创 2015-08-20 16:23:09 · 914 阅读 · 0 评论 -
九度 1101 - 字符串处理 - 计算表达式
根据我的通过来看,首先这道题里面没有小数,如果存在除不尽的情况,也是按取整来算。本题建立了两个栈,一个存储数字的数字栈,一个存储加减乘除的符号栈。在处理字符串的时候,每次找到一个数字时,放进一个string的临时变量里,因为会存在十位以上的情况;每次找到一个符号时,首先将string变量转int放入数字栈,然后检查符号栈的栈顶符号是否为乘或者除,如果是就从符号栈弹出顶,从数字栈弹出两个数,计算原创 2015-08-20 18:12:37 · 1114 阅读 · 0 评论 -
九度 1105 - 字符串处理 - 字符串的反码
这道题目最大的难度(我觉得题目本身也没说清楚....)就是输入的字符串会有空格,所以我们不能用scanf和cin,而是改用gets和puts。gets可以接受空格,而scanf不能。用这道题目记录一下。#include#includechar a[100];int main(){ int i; while( gets(a)){ if(strcmp(a,"!")==0)原创 2015-08-23 10:03:41 · 1502 阅读 · 0 评论 -
九度 1138 - 大数除余 - 进制转换
其实基本的十进制转二进制方法我们都知道,就是循环模2,除2这两个过程。下面是一个大概的方法代码。while(n>0){ binary[count++] = n%2; n = n/2;}这道题目就是把除和余的过程变成了大数上的除余。这里我从网上找到了一个博主的博客点击打开链接,他的大数除余写的很简洁,也算学习借鉴了。这个博主大数的其他算法写的也很不错。#include#inclu原创 2015-08-24 15:29:30 · 1094 阅读 · 0 评论 -
九度 1140 - 回溯 - 八皇后
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 一个皇后q(x,y)能被满足以下条件的皇后q(row,col)吃掉x=row(在纵向不能有两个皇后)y=col(横向)col + row = y+x;(斜向正方向) col - row原创 2015-08-25 20:31:03 · 974 阅读 · 0 评论