二叉解决 hdu 1872 稳定排序
来源:互联网 发布:国学大师软件 编辑:程序博客网 时间:2024/06/05 17:54
稳定排序
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3093 Accepted Submission(s): 1193
Problem Description
大家都知道,快速排序是不稳定的排序方法。
如果对于数组中出现的任意a[i],a[j](i<j),其中a[i]==a[j],在进行排序以后a[i]一定出现在a[j]之前,则认为该排序是稳定的。
某高校招生办得到一份成绩列表,上面记录了考生名字和考生成绩。并且对其使用了某排序算法按成绩进行递减排序。现在请你判断一下该排序算法是否正确,如果正确的话,则判断该排序算法是否为稳定的。
如果对于数组中出现的任意a[i],a[j](i<j),其中a[i]==a[j],在进行排序以后a[i]一定出现在a[j]之前,则认为该排序是稳定的。
某高校招生办得到一份成绩列表,上面记录了考生名字和考生成绩。并且对其使用了某排序算法按成绩进行递减排序。现在请你判断一下该排序算法是否正确,如果正确的话,则判断该排序算法是否为稳定的。
Input
本题目包含多组输入,请处理到文件结束。
对于每组数据,第一行有一个正整数N(0<N<300),代表成绩列表中的考生数目。
接下来有N行,每一行有一个字符串代表考生名字(长度不超过50,仅包含'a'~'z'),和一个整数代表考生分数(小于500)。其中名字和成绩用一个空格隔开。
再接下来又有N行,是上述列表经过某排序算法以后生成的一个序列。格式同上。
对于每组数据,第一行有一个正整数N(0<N<300),代表成绩列表中的考生数目。
接下来有N行,每一行有一个字符串代表考生名字(长度不超过50,仅包含'a'~'z'),和一个整数代表考生分数(小于500)。其中名字和成绩用一个空格隔开。
再接下来又有N行,是上述列表经过某排序算法以后生成的一个序列。格式同上。
Output
对于每组数据,如果算法是正确并且稳定的,就在一行里面输出"Right"。如果算法是正确的但不是稳定的,就在一行里面输出"Not Stable",并且在下面输出正确稳定排序的列表,格式同输入。如果该算法是错误的,就在一行里面输出"Error",并且在下面输出正确稳定排序的列表,格式同输入。
注意,本题目不考虑该排序算法是错误的,但结果是正确的这样的意外情况。
注意,本题目不考虑该排序算法是错误的,但结果是正确的这样的意外情况。
Sample Input
3aa 10bb 10cc 20cc 20bb 10aa 103aa 10bb 10cc 20cc 20aa 10bb 103aa 10bb 10cc 20aa 10bb 10cc 20
Sample Output
Not Stablecc 20aa 10bb 10RightErrorcc 20aa 10bb 10
Author
linle
Source
2008浙大研究生复试热身赛(2)——全真模拟
#include <stdio.h>#include<string.h>int n=0,q=0,cmps[310],flag;//n用来分配内存q用来记录比较到哪个学生了.//记录待判断分数和正确排序后的分数char cmpn[310][55];//用来存待判断姓名和正确排序后的姓名struct stree{ char name[55]; int score; int left,right;} st[310];void stree(int *p,char *na,int s){ if(*p==-1)//如果到达空结点 { *p=n++;//分配一个数组 strcpy(st[*p].name,na);//存数据 st[*p].score=s; st[*p].left=st[*p].right=-1; } else { if(s>st[*p].score)//如果分数比结点高进入右子树 //这样才能保证排序稳定 stree(&st[*p].right,na,s); else stree(&st[*p].left,na,s); }}void jud(int p){ /*if(flag==0) return ; *///不能加这一句。这样后面的错误排序就不会修改了。。。 //加此句适合只判断不输出正确排序的情况 if(p==-1)//到达根节点返回 return ; jud(st[p].right); if(st[p].score!=cmps[q])//判断待判断排序记录判断结果。记录正确排序 { flag=0; cmps[q]=st[p].score; strcpy(cmpn[q],st[p].name);//注意名字也要改! } else if(strcmp(st[p].name,cmpn[q])!=0) { flag=2; strcpy(cmpn[q],st[p].name); } q++;//判断下一个 jud(st[p].left);}int main(){ int m,root=-1,i; char tname[55]; int tscore;//零时变量读输入 while(scanf("%d",&m)!=EOF) { n=0,root=-1,flag=1,q=0;//初始化 for(i=0;i<m;i++) { scanf("%s%d",tname,&tscore);//读入初始数据并稳定排序 getchar(); stree(&root,tname,tscore); } for(i=0;i<m;i++) { scanf("%s%d",cmpn[i],&cmps[i]);//读入待比较数据 getchar(); } jud(root);//判断并记录正确排序 if(flag==1) printf("Right\n"); else if(flag==0) printf("Error\n"); else printf("Not Stable\n"); if(flag==0||flag==2) for(i=0;i<m;i++) printf("%s %d\n",cmpn[i],cmps[i]); } return 0;}
- 二叉解决 hdu 1872 稳定排序
- hdu 1872 稳定排序
- hdu 1872 稳定排序
- HDU 1872 稳定排序
- hdu 1872 稳定排序
- hdu 1872 稳定排序
- HDU 1872 稳定排序
- hdu-1872 稳定排序
- hdu 1872 稳定排序
- hdu 1872 稳定排序
- hdu 1872 稳定排序
- hdu 稳定排序 1872
- HDU 1872 稳定排序
- HDU 1872 - 稳定排序
- HDU 1872 稳定排序
- HDU 1872 稳定排序
- HDU 1872 稳定排序
- HDU 1872 稳定排序
- android camera(四):camera 驱动 GT2005
- Android--自定义标题栏之显示网页加载进度
- JQuery学习视频
- UINavigationController与UITabBarController
- 自定义dialog对话框获取EditText数据demo
- 二叉解决 hdu 1872 稳定排序
- VS2008 C# .net compact framework 警告的处理(部分)
- lua 中pairs 和 ipairs区别
- 几道比较基础的Java面试题 .
- android xml 解析
- 黑马程序员_java中的IO流2
- HibernateDaoSupport
- svn: 无法连接主机“x.x.x.x”: 没有到主机的路由
- hibernate中的session