HDU3877 Special sort【穩定排序】

Special sort

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1657 Accepted Submission(s): 498

Problem Description
We all know a+b=c,but now there is a new rule in equations:
if a>b,then it’s equal to [>c];
if a=b,then it’s equal to [=c];
if a<b,then it’s equal to [<c];
a sample:

1+1=[=2]
2+0=[>2]
0+2=[<2]
1+2=[❤️]

and [>c] > [=c] > [<c].
For every [n],
[n+1] > [n] >[n-1].

Input
The input consists of T cases.The first line of the input contains only positive integer T (0<T<=100).Then follows the cases.Each case begins with a line containing exactly one integer N (0<N<=10000).Then there are N lines, each with two integers a and b (0<a,b<2^31-1).

Output
For each case, calculate each value of a+b(as a+b=[?]) and output a+b=[?] in descending order sorted by [?]. If there exists some pair of a,b whose order can not be determined by the rules above, output them with the order of the input. A blank line should be printed after each case.

Sample Input
2
5
1 5
5 1
3 3
4 5
5 6
5
1 6
6 1
2 4
4 2
3 3

Sample Output
5+6=[<11]
4+5=[<9]
5+1=[>6]
3+3=[=6]
1+5=[<6]

6+1=[>7]
1+6=[<7]
4+2=[>6]
3+3=[=6]
2+4=[<6]

Source
2011 Multi-University Training Contest 4 - Host by SDU

問題鏈接HDU3877 Special sort
問題簡述:(略)
問題分析
    穩定排序問題,使用C++的STL中含有穩定排序算法函數stable_sort()來解決。
    有關穩定排序的知識,參見參考鏈接。
程序說明:(略)
參考鏈接HDU1872 穩定排序【穩定排序】

題記:(略)

AC的C++語言程序如下:

/* HDU3877 Special sort */

#include <bits/stdc++.h>

using namespace std;

const int N = 10000;
struct Node {
    long long a, b;
    char rel;
} d[N];

bool cmp(const Node &x, const Node &y)
{
    return x.a + x.b != y.a + y.b ? x.a + x.b > y.a + y.b : x.rel > y.rel;
}

int main()
{
    int t, n;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &n);
        for(int i = 0; i < n; i++) {
            scanf("%lld%lld", &d[i].a, &d[i].b);
            if(d[i].a > d[i].b) d[i].rel = '>';
            else if(d[i].a == d[i].b) d[i].rel = '=';
            else d[i].rel = '<';
        }

        stable_sort(d, d + n, cmp);

        for(int i = 0; i < n; i++)
            printf("%lld+%lld=[%c%lld]\n", d[i].a, d[i].b, d[i].rel, d[i].a + d[i].b);
        printf("\n");
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章