NYOJ 8 一种排序【快排】

三级快排,注意题意要求就可以了。

一种排序

时间限制: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
来源
经典题目
上传者
iphxer
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int flag[1010];

struct st
{
	int num;
	int l;
	int d;
}s[1010];

int cmp(st a,st b)
{
	if(a.num!=b.num) return a.num<b.num;
	if(a.l!=b.l)	return a.l<b.l;
	if(a.d!=b.d)	return a.d<b.d;
}

int main()
{
	int n,m,i,t;
	scanf("%d",&n);
	while(n--)
	{
		memset(flag,0,sizeof(flag));
		scanf("%d",&m);
		for(i=0;i<m;i++)
		{
			scanf("%d%d%d",&s[i].num,&s[i].l,&s[i].d);
			if(s[i].l<s[i].d)
			{
				t=s[i].l;
				s[i].l=s[i].d;
				s[i].d=t;
			}
		}
		sort(s,s+m,cmp);
		//printf("..................\n");
//		for(i=0;i<m;i++)
//			printf("%d %d %d\n",s[i].num,s[i].l,s[i].d);
//
		for(i=1;i<m;i++)
		{
			if(s[i].num==s[i-1].num&&s[i].l==s[i-1].l&&s[i].d==s[i-1].d)
				flag[i]=1;
		}
		//printf("..................\n");
		for(i=0;i<m;i++)
		if(flag[i]==0)
			printf("%d %d %d\n",s[i].num,s[i].l,s[i].d);
	}
	return 0;
}
时间: 2024-09-29 09:12:46

NYOJ 8 一种排序【快排】的相关文章

区间模糊排序---快排思路的应用

1 #include<iostream> 2 #include<ctime> 3 using namespace std; 4 #define max(a,b) (a>b)?a:b 5 #define min(a,b) (a>b)?b:a 6 class Interval 7 { 8 public: 9 double leftbound; 10 double rightbound; 11 Interval(int a, int b) :leftbound(a), rig

数据结构-排序-快排

快速排序 首先快速排序步骤: 首先选择轴值 把待排序内容分为两部分,左边为小于或者等于轴值,右边为大于轴值 然后对左右重复上面步骤直到整个序列有序 直接上代码这里先写一次划分的代码 这里的一次划分是那第一个数字为轴值,我们也可以用最后一个或者中间的. #include<iostream> #include<vector> using namespace std; //不含暂存单元的数组v1 int temp1[]={59,20,17,36,98,14,23,83,13,28}; v

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 一种排序(sort运用)

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

总结4种常用排序(快排、选择排序、冒泡排序、插入排序)

一. 选择排序 概念理解: 在一个长度为3的数组中,在第一趟遍历3个数据,找出其中最小的数值与第一个元素交换: 第二趟遍历2个数据,找出其中最小的元素与第一个数交换(注意:这里的第一个数是指遍历的第一个数,实质上是数组的第二个数) 而第三趟则是和自己比较,位置还是原来的位置 复杂度: 平均时间复杂度:O(n^2) 例子: //选择排序 function selectionSortFn(arr){ console.log('原数组:['+ arr + ']') for (var i = 0; i

[排序] 快排 &amp;&amp; 冒泡(自己写)

#include <iostream> using namespace std; /* 快速排序 通过一趟排序,以轴点为界 分割为两部分:左部分 <= 轴点 <= 右部分 再分别对左右两部分继续递归排序 最终整个序列有序 */ void quickSort(int arr[], int low,int high){ //if (arr==NULL||length<=0||start<=0||end>=length) //break; int i,key,j; if

12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251. 声明:版权所有,转载请注明出处,谢谢. 0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综

13种排序算法详解

0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综合发散而来.比如说作为最基本的排序算法就种类很多,而事实上笔试面试过程中发现掌握的程度很一般,有很多题目,包括很多算法难题,其母题或者基本思想就是基于这些经典算法的,