摘要: //提交通过,时间0.008,本题主要是字符串处理,以及层序建树,以及前序(DFS递归)//遍历3个知识点,细节问题是字符串的处理,以及空树的处理#include <stdio.h>#include <string.h>#define MAX 40010struct tree{ char data; int l,r; //最左边的孩子下标和最右边的孩子下标 int x,y; //它自身在最开始的字符矩阵中的列和行,x是列,y是行}tree[MAX];char string[210][210];char stack[MAX]; int top,line;void inpu 阅读全文
posted @ 2012-10-05 22:55 Titanium 阅读(226) 评论(0) 推荐(0) 编辑
摘要: //水题,直接模拟#include <stdio.h>#include <string.h>int string[10],x[10],level;int numnode[10]={1,2,4,8,16,32,64,128};char leaf[300];int main(){ int T=0,n,m,i,j,p,q,num,level; char ch,temp[10],ans[300]; while(scanf("%d",&n)!=EOF && n) { getchar(); T++; printf("S-Tree 阅读全文
posted @ 2012-10-05 22:54 Titanium 阅读(218) 评论(0) 推荐(0) 编辑
摘要: //又是DFS,其实就是建树然后一边建一般判读,但是很多这种题都不一定真刀真枪地//把建树语句写出来,只要是这种思路即可,这样就可以减少时间#include <stdio.h>int ok;int dfs(){ int w1,d1,w2,d2; scanf("%d%d%d%d",&w1,&d1,&w2,&d2); if(w1 && w2 && d1 && d2) { if( (w1*d1) != (w2*d2) ) {ok=0; return 0;} else return (w1+ 阅读全文
posted @ 2012-10-05 22:54 Titanium 阅读(648) 评论(0) 推荐(0) 编辑
摘要: //思路:一遍输入扩展前序一遍建树,在建树过程中记录该结点的水平坐标,根结点的坐标为0,往左减1,往右加1,最后会的到一个最左侧坐标L,最右侧坐标R建树之后见遍历、,遍历过程中,统计各个坐标的值并求他们的和保存在数组中,但是左侧的坐标是负值,数组没有负值,所以开一个二维数组sum[2][MAX],第一行对应右侧的坐标,从1到R,第二行对应左侧的坐标,从1到-L,也就是将左侧的坐标在统计时取绝对值,然后累加求和.思考可知建树和遍历的过程实际上相同所以干脆把遍历去掉,直接建树,建树过程中就求水平坐标并累计求和//注意输出的格式,时间也不太好,0.100上下#include <stdio.h& 阅读全文
posted @ 2012-10-05 22:52 Titanium 阅读(257) 评论(0) 推荐(0) 编辑
摘要: //提交通过,0.092,不算太快,先给出代码#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 10010#define INF 100000010struct treenode{ int data,lchild,rchild,level;};int *start,*flag;int min,leaf,pre,value;int input(int *post , int *ind){ int i,len; char ch; i=0; while(1) { if(... 阅读全文
posted @ 2012-10-05 22:51 Titanium 阅读(662) 评论(0) 推荐(0) 编辑
摘要: //难得的1Y,完全水过去,硬生生地把式子搞出来,代码写得很差,但是数据较小而且判断//较多所以省去不少时间#include <stdio.h>#include <string.h>#include <algorithm>#define MAX 150using namespace std;char string[150],temp[150];struct elemt{ char ch; int data; int flag;}a[MAX]; //flag=0表示这个元素在运算结束之后不需要变化,1表示运算后加1,-1表示运算后减1,所以同意+flag即可i 阅读全文
posted @ 2012-10-05 22:50 Titanium 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 这道题最难的地方是怎么计算最后的结果,建树不难,就按照前序建树即可,DFS遍历也不难,要算出每棵是中黑色像素也不难,但问题是怎么确定最后的结果//一下代码可以建树,可以DFS遍历,可以计算每棵树的黑点个数,但不能解出//本题,要做出一些改动//提交通过,时间不错,在0.008到0.020之间#include <stdio.h>#include <string.h>#include <stdlib.h>#define LEN sizeof(struct tree)int weight[7]={0,1024,256,64,16,4,1};struct tree{ 阅读全文
posted @ 2012-10-05 22:48 Titanium 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 将原来的代码改了一个BUG即是存在负数后就AC了,但是时间不好,0.112实际上本题就是由扩展前序序列来建树,然后遍历,算路径的题目,考查了二叉树的基本知识,很好#include <stdio.h>#include <string.h>#include <stdlib.h>#define LEN sizeof(struct BTree)#define MAX 10010char num[MAX][20],stack[MAX];struct BTree{ int data; struct BTree *lchild,*rchild;}*pre;int top, 阅读全文
posted @ 2012-10-05 22:47 Titanium 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 算法分析:构建表达树后可以发现,用栈实现逆波兰表达式其实是用后序遍历的方式来输入树的所有结点,如果用队列实现是用层序遍历的方式来输出所有结点,所以本题可以转化为已知后序遍历的序列然后构树再用层次遍历的方式输出要构建二叉树至少知道两个遍历序列,或者设法构建扩展二叉树显然该题由小写字母就可以知道是树的根结点,可以构建成为扩展二叉树,至此,建树成功,即可层序遍历的方式输出结点(先在输入时将遍历序列变成扩展遍历序列)2xyPzwIM ##x##yP##z##wIMabcABdefgCDEF ##a##b##cAB##d##e##f##gCDEF//然后由扩展后序遍历序列来构建二叉树,然后用层序遍历的方 阅读全文
posted @ 2012-10-05 22:45 Titanium 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 大意是:判断一个玩具内能否容下其它小玩具,当且仅当其它玩具尺寸之和小于外层玩具时输出Matrioshka//1Y的代码,很好,其实就是模拟一下,注意一下细节#include <stdio.h>#include <string.h>#define MAX 10010struct node{ int size,volume;};struct node a[MAX],temp[MAX];int n,top,outside;int JUDGE(){ int i; memset(a , 0 ,sizeof(a)); // printf("test a volume\n& 阅读全文
posted @ 2012-10-05 22:41 Titanium 阅读(298) 评论(0) 推荐(0) 编辑
摘要: //非常好的算法,代码很短,20来行就可以,时间也不差0.060,但是考虑是否可以更快//这个算法用到了“相对位置”的思想,并且就本题而言还有一个很重要的结论就是,假设//移动了k个元素,那么这k个元素一定是最后结果的那个序列的前k个元素,而且易知,//越先移动的元素一定会越被压在移动的元素的底部#include <stdio.h>#include <string.h>char name[210][100],standard[210][100];int main(){ int T,i,j,n; scanf("%d",&T); while(T- 阅读全文
posted @ 2012-10-05 22:36 Titanium 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 算法描述:开辟一个日期数组,清空为0,以1来标记当天已经有活动,不用再添加,每次从0变为1就计数一次。另外做一个预处理,将所有的周五和周六标记为1,但不能计数,没得到一个h,就调用函数在日期数组中搜索判断。判断所有h的倍数,如果为0,则计数并变为1#include <stdio.h>#include <string.h>#define MAX 3660bool date[MAX];int count,N;void manage(){ int i; memset( date , 0 , sizeof(date) ); for(i=7; i<=N+1; i+=7) d 阅读全文
posted @ 2012-10-05 22:33 Titanium 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 水题照题意模拟即可#include <stdio.h>#include <string.h>#define MAX 130char s[MAX];int main(){ int i,n,top,len; char temp[MAX],ch; scanf("%d",&n); getchar(); while(n--) { gets(temp); len=strlen(temp); if(len==0) { printf("Yes\n"); continue; } for(top=0,i=0; i<len; i++) { 阅读全文
posted @ 2012-10-05 22:31 Titanium 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题意加算法描述:先给出T个团体,并给出每个团体有多少人,每个人的编号,然后所有团体一起排队,排成一条大队列,排队的原则是,一个成员加入,如果这个成员所在的团体已经有人在排队了,那么他就加到他所在团体的最后面,而不是整个大队列的最后。如果整个大队列中没有他的团体,也就是他是他的那个团体第一个来的人,那么他就要排在整个大队列的最后(当然,他成为了他这个团体的第一人,以后他的队友来了就可以排他后面)出队则是按大队列的顺序,从第一名开始出队的,也就是说,按排在前面的团体的人按顺序逐一出完队后下一个团体的人才有可能出队本题在写的过程中运用了大量映射的思想,并且本题本身是个队列数据结构的题目,且用到了两个 阅读全文
posted @ 2012-10-05 22:25 Titanium 阅读(2069) 评论(0) 推荐(1) 编辑
摘要: //此题其实不是考查矩阵乘法的问题,只是借这个背景来考查栈的运用,注意处理一些细节即可#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define MAX 30struct matrix{int r,c; char e;}a[MAX];int n;char s[10000010],stack[10000010];int cmp(struct matrix p ,struct matrix q){ return p.e<q.e; }int main 阅读全文
posted @ 2012-10-05 22:24 Titanium 阅读(248) 评论(0) 推荐(0) 编辑
摘要: //算法描述,构建一个双向循环链表,不需要不存放数据的头指针,按照prior指针遍历则认为是逆时针,按照next指针遍历则认为是顺时针//prior是逆时针,next是顺时针#include <stdio.h>#include <stdlib.h>#define LEN sizeof(struct node)int N,k,m;struct node{ int num; struct node *prior,*next;};void print_link(struct node *L){ struct node *p; p=L; printf("%d\n&qu 阅读全文
posted @ 2012-10-05 22:23 Titanium 阅读(223) 评论(0) 推荐(0) 编辑
摘要: //完全自己写的代码,用链表写的,很多细节没有修改,明天再改,时间是0.544//关键是find_3和find_1和swap函数的使用,注意细节,注意有的内存是一定要free释放//掉的,注意指针的使用,有的是把指针的值传递过去,有的是把指针变量本身的地址传递//过去,两者完全不同,注意看#include <stdio.h>#include <string.h>#include <stdlib.h>#define LEN1 sizeof(struct card)#define LEN2 sizeof(struct list)#define MAX 52 st 阅读全文
posted @ 2012-10-05 22:19 Titanium 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 1. move a onto b在將a搬到b上之前,先將a和b上的積木放回原來的位置(例如:1就放回1的最開始位罝)2. move a over b在將a搬到b所在的那堆積木之上之前,先將a上的積木放回原來的位罝(b所在的那堆積木不動)3. pile a onto b將a本身和其上的積木一起放到b上,在搬之前b上方的積木放回原位4. pile a over b將a本身和其上的積木一起搬到到b所在的那堆積木之上//用链表实现,没有任何算法可言,完全就是模拟,感觉用数组来做代码能更短//由于用链表来做的原因,涉及到指针所以很多细节问题,实际上调试很久,指针的东西太久没写都忘记//了,以后要适当复习 阅读全文
posted @ 2012-10-05 22:16 Titanium 阅读(198) 评论(0) 推荐(0) 编辑