【杭电1872】稳定排序
2016-07-21 09:55
232 查看
稳定排序(sort+结构体)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
大家都知道,快速排序是不稳定的排序方法。
如果对于数组中出现的任意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行,是上述列表经过某排序算法以后生成的一个序列。格式同上。
Output
对于每组数据,如果算法是正确并且稳定的,就在一行里面输出"Right"。如果算法是正确的但不是稳定的,就在一行里面输出"Not Stable",并且在下面输出正确稳定排序的列表,格式同输入。如果该算法是错误的,就在一行里面输出"Error",并且在下面输出正确稳定排序的列表,格式同输入。
注意,本题目不考虑该排序算法是错误的,但结果是正确的这样的意外情况。
Sample Input
3
aa 10
bb 10
cc 20
cc 20
bb 10
aa 10
3
aa 10
bb 10
cc 20
cc 20
aa 10
bb 10
3
aa 10
bb 10
cc 20
aa 10
bb 10
cc 20
Sample Output
Not Stable
cc 20
aa 10
bb 10
Right
Error
cc 20
aa 10
bb 10
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
大家都知道,快速排序是不稳定的排序方法。
如果对于数组中出现的任意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行,是上述列表经过某排序算法以后生成的一个序列。格式同上。
Output
对于每组数据,如果算法是正确并且稳定的,就在一行里面输出"Right"。如果算法是正确的但不是稳定的,就在一行里面输出"Not Stable",并且在下面输出正确稳定排序的列表,格式同输入。如果该算法是错误的,就在一行里面输出"Error",并且在下面输出正确稳定排序的列表,格式同输入。
注意,本题目不考虑该排序算法是错误的,但结果是正确的这样的意外情况。
Sample Input
3
aa 10
bb 10
cc 20
cc 20
bb 10
aa 10
3
aa 10
bb 10
cc 20
cc 20
aa 10
bb 10
3
aa 10
bb 10
cc 20
aa 10
bb 10
cc 20
Sample Output
Not Stable
cc 20
aa 10
bb 10
Right
Error
cc 20
aa 10
bb 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct stu { char s[100]; int x,d; }a[300],b[300]; bool cmp(stu n,stu m) { if(n.x==m.x) return n.d<m.d;//如果分数相同按序号从小到大排 else return n.x>m.x;//分数从高到低排列 } int main() { int n,i,j; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%s %d",&a[i].s,&a[i].x); a[i].d=i;//记录序号 } sort(a,a+n,cmp); int f=0; for(i=0;i<n;i++) { scanf("%s %d",&b[i].s,&b[i].x); b[i].d=0; if(f<2) { if(strcmp(b[i].s,a[i].s)!=0) f=1; if(b[i].x!=a[i].x) f=2; } } if(f==0) printf("Right\n"); else { if(f==1) printf("Not Stable\n"); else if(f==2) printf("Error\n"); for(i=0;i<n;i++) printf("%s %d\n",a[i].s,a[i].x); } } return 0; }
相关文章推荐
- 转载整理一些网址
- 如何有效应对游戏行业DDoS攻击?
- Android 实现微信登录详解
- java常用字节流
- 扩栈语句
- 文本 字节顺序标记(BOM)
- 移动端图片_编码解码调研
- laravel 初见 安装 路由 模块化 2016.07.20回顾
- java中的字符串
- SDUT 1479 数据结构实验之栈:行编辑器
- 谁都需要成就感二
- J2EE-session在浏览器关闭后失效问题
- java synchronized关键字的用法
- 详解Android中AsyncTask的使用
- 字符串hash判重/trie树判重(poj3007)
- LoopBar – Tap酒吧与无限滚动
- asp.net 使用HttpModule记录全局错误
- Citrix运行检测出错
- (转载)Hibernate的事务管理
- js学习笔记三(Date)