nyoj 8 一种排序(sort运用)

一种排序

时间限制:3000 ms  |  内存限制:65535 KB

难度:3

描述
现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);

1.按照编号从小到大排序

2.对于编号相等的长方形,按照长方形的长排序;

3.如果编号和长都相同,按照长方形的宽排序;

4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;

输入
第一行有一个整数 0<n<10000,表示接下来有n组测试数据;

每一组第一行有一个整数 0<m<1000,表示有m个长方形;

接下来的m行,每一行有三个数 ,第一个数表示长方形的编号,

第二个和第三个数值大的表示长,数值小的表示宽,相等

说明这是一个正方形(数据约定长宽与编号都小于10000);

输出
顺序输出每组数据的所有符合条件的长方形的 编号 长 宽
样例输入
1
8
1 1 1
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
样例输出
1 1 1
1 2 1
1 2 2
2 1 1
2 2 1

思路:sort函数的运用

Code:

#include <stdio.h>
#include <algorithm>
using namespace std;
struct node
{
    int w,h,ans;
}a[1000];

bool cmp(node x,node y)                 //cmp函数的改写
{
    if(x.ans<y.ans)
        return true;
    if(x.ans==y.ans&&x.h<y.h)
        return true;
    if(x.ans==y.ans&&x.h==y.h&&x.w<y.w)
        return true;
    return false;
}

int main()
{
    int n,m,i;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&a[i].ans,&a[i].h,&a[i].w);
            if(a[i].h<a[i].w)                           //这里要注意先判断长和宽
                swap(a[i].h,a[i].w);
        }
        sort(a,a+m,cmp);
        printf("%d %d %d\n",a[0].ans,a[0].h,a[0].w);
        for(i=1;i<m;i++)                                //控制输出,把相同的就不输出了
        {
            if(a[i].ans==a[i-1].ans&&a[i].h==a[i-1].h&&a[i].w==a[i-1].w)
                continue;
            printf("%d %d %d\n",a[i].ans,a[i].h,a[i].w);
        }
    }
    return 0;
}
时间: 2024-08-04 18:43:59

nyoj 8 一种排序(sort运用)的相关文章

nyoj 8 一种排序(用vector,sort,不用set)

一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现在要求按照一下方式排序(默认排序规则都是从小到大): 1.按照编号从小到大排序 2.对于编号相等的长方形,按照长方形的长排序: 3.如果编号和长都相同,按照长方形的宽排序: 4.如果编号.长.宽都相同,就只保留一个长方形用于排序,删除多余的长方形:最后排好序按照指定格式显示所有的长方形: 输入 第一

NYOJ 8 一种排序【快排】

三级快排,注意题意要求就可以了. 一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现在要求按照一下方式排序(默认排序规则都是从小到大): 1.按照编号从小到大排序 2.对于编号相等的长方形,按照长方形的长排序: 3.如果编号和长都相同,按照长方形的宽排序: 4.如果编号.长.宽都相同,就只保留一个长方形用于排序,删除多余的长方形:最后排好序按照指定

nyoj 8 一种排序

一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现在要求按照一下方式排序(默认排序规则都是从小到大): 1.按照编号从小到大排序 2.对于编号相等的长方形,按照长方形的长排序: 3.如果编号和长都相同,按照长方形的宽排序: 4.如果编号.长.宽都相同,就只保留一个长方形用于排序,删除多余的长方形:最后排好序按照指定格式显示所有的长方形: 输入 第一

(去重 sort)nyoj8-一种排序

8-一种排序 内存限制:64MB 时间限制:3000ms 特判: No通过数:235 提交数:749 难度:3 题目描述: 现在要求按照以下方式排序(默认排序都是从小到大) 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现在要求按照一下方式排序(默认排序规则都是从小到大): 1.按照编号从小到大排序 2.对于编号相等的长方形,按照长方形的长排序: 3.如果编号和长都相同,按照长方形的宽排序: 4.如果编号.长.宽都相同,就只保留一个

八种排序算法

最近一段时间自己在研究各种排序算法,于是自己写了一个八种排序算法的集合: /************************************************************************* > Copyright (c)2014 stay hungry,stay foolish !!! > File Name: sort.cpp > Author: kanty > Mail: [email protected] > Created Time:

模板化的七种排序算法,适用于T* vector&lt;T&gt;以及list&lt;T&gt;

最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板纯属于偷懒,更方便于测试代码的有效性,等代码写完也懒得去改了.下面开始介绍这段代码,有什么不对的地方欢迎前来指正. 一共写了七种排序,插入排序InsertSort.堆排序HeapSort.快速排序QuickSort.合并排序MergeSort,计数排序CountingSort,基数排序RadixSo

几种排序算法比较

图解数据结构(10)——排序 十四.排序(Sort) http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html <Thinking in Algorithm>12.详解十一种排序算法 http://blog.csdn.net/speedme/article/details/23021467

HashMap的两种排序方式

Map<String, Integer> map = new HashMap<String, Integer>(); map.put("d", 2); map.put("c", 1); map.put("b", 1); map.put("a", 3); List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.

常见的几种排序

快速排序 从数列中挑出一个元素,称为 "基准"(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边).在这个分区退出之后,该基准就处于数列的中间位置.这个称为分区(partition)操作.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序. 排序效果: int PartSort(int* a, int left, int right)   //每步的排序 {     int key =