• HDU 1872 稳定排序


    稳定排序

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 5762    Accepted Submission(s): 2159

    Problem 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

    Author

    linle

    Source

    2008浙大研究生复试热身赛(2)——全真模拟

    Recommend

    lcy   |   We have carefully selected several similar problems for you:  1862 1873 1876 2020 1106

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 using namespace std;
     6 struct NODE{
     7     int ID,socre;
     8     char name[60];
     9     bool operator < (const NODE a) const{
    10         if(socre!=a.socre) return a.socre<socre;
    11         return ID<a.ID;
    12     }
    13 }s[305],t[305];
    14 int n;
    15 int main()
    16 {
    17     while(scanf("%d",&n)!=EOF){
    18         for(int i=0;i<n;i++){
    19             scanf("%s%d",s[i].name,&s[i].socre);
    20             s[i].ID=i;
    21         }
    22         sort(s,s+n);
    23         bool flag1=false,flag2=false;
    24         for(int i=0;i<n;i++){
    25             scanf("%s%d",t[i].name,&t[i].socre);
    26             if(strcmp(s[i].name,t[i].name)){
    27                 if(s[i].socre==t[i].socre) flag1=true;
    28                 else flag2=true;
    29             }
    30         }
    31         if(flag2)printf("Error
    ");
    32         else if(flag1) printf("Not Stable
    ");
    33              else{ printf("Right
    ");continue; } 
    34         for(int i=0;i<n;i++)
    35           printf("%s %d
    ",s[i].name,s[i].socre);
    36     }
    37     return 0;
    38 }

    双关键字排序~~

  • 相关阅读:
    面向对象的测试用例设计有几种方法?如何实现?
    html5直接调用手机相机照相/录像
    关于ionic2在IOS上点击延迟的问题
    vue项目使用html5+ barcode扫码在苹果遇到的问题以及自己的解决方法
    vue设置多个入口
    把项目中的vant UI组件升级
    记录axios在IOS上不能发送的问题
    getElementsByClassName兼容 封装
    记录vue用 html5+做移动APP 用barcode做扫一扫功能时安卓 的bug(黑屏、错位等等)和解决方法
    JS的事件委托
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6379130.html
Copyright © 2020-2023  润新知