/*
一种排序

时间限制: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

*/

//基本思路是每输入一个长方形的数据就将它与前面的长方形进行比较,如果是相同则将此数据忽略

//否则查询该长方形应插入到排好序的序列中的位置,最后移位进行插入

//最近常到南阳理工的ACM网站去A题了,虽然题大多都不太难,但每当做完一道题,心里都有一种说不出的愉悦。

//程序本身应该也不难,应该是自己的方法选得不对才导致程序写得这么难看,改了大半天,好在最后还是AC了,还是挺开心的

//程序中还多处用到了goto,,没办法呀,想从多重嵌套的for循环中一下子跳出来,还是用goto最省事了。

//网上应该有很多写得更好的代码,我等下也去看看别人写的。

#include <iostream>

using namespace std;

const int M = 1000;

int main()

{

//
freopen("1.txt", "r", stdin);


int n, m, i, j;


int flags;//用来标记应插入的位置


int a[M][3]; //用来存放排好序的长方形数据


int number, length, width;//暂存长方形数据

cin>>n;


while(n--)


{


int temp, mask;

mask = 1; //用来记录存放的长方形个数


cin>>m;


flags = 0; 


cin>>a[0][0]>>a[0][1]>>a[0][2];


if (a[0][1] < a[0][2])


{


temp = a[0][1];


a[0][1] = a[0][2];


a[0][2] = temp;


}


for (i = 1; i < m; i++)


{


cin>>number>>length>>width;


if (length < width)//将长,宽中的较大的数存放到变量length中,软小的数存放到变量width中


{


temp = length;


length = width;


width = temp;

}

//下面查找新输入的长方形信息应该插入的正确位置

for (j = mask-1; j >= 0; j--)


{


if (number == a[j][0])


{


for (; j >= 0; j--)


{


if (length == a[j][1])


{


for (; j >= 0; j--)


{


if (width == a[j][2])


{


goto lop;


}


else if((width > a[j][2] && length == a[j][1] && number == a[j][0])


|| (length != a[j][1]) || (number != a[j][0]))


{


flags = j;


goto loop;


}


}


if (j == -1)


goto loop;


}


else if((length > a[j][1] && number == a[j][0]) || (number != a[j][0]))


{


flags = j;


goto loop;


}


}


if (j == -1)


goto loop;


}


else if (number > a[j][0])


{


flags = j;


goto loop;


}


}

loop:


if (j == -1) //如果插入的位置为最前


{


for (j = mask-1; j >= 0; j--)


{


a[j+1][0] = a[j][0];


a[j+1][1] = a[j][1];


a[j+1][2] = a[j][2];


}


a[0][0] = number;


a[0][1] = length;


a[0][2] = width;


mask++;


}


else


{


for (j = mask-1; j > flags; j--)


{


a[j+1][0] = a[j][0];


a[j+1][1] = a[j][1];


a[j+1][2] = a[j][2];


}


a[j+1][0] = number;


a[j+1][1] = length;


a[j+1][2] = width;


mask++;


}

lop:
;


}

for (i = 0; i < mask; i++)


{


cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<endl;


}


}


return 0;

}

南阳ACM8-一种排序的更多相关文章

  1. 南阳ACM 题目8:一种排序 Java版

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现 ...

  2. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  3. 模板化的七种排序算法,适用于T* vector<T>以及list<T>

    最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...

  4. 几种排序算法的学习,利用Python和C实现

    之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...

  5. ACM 一种排序

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  6. 秒杀9种排序算法(JavaScript版)

    一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...

  7. nyoj 8 一种排序

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  8. JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)

    每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...

  9. java数组中的三种排序方法中的冒泡排序方法

    我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...

随机推荐

  1. Top 10 Revit Architecture 2014 books

    Revit Architecture, along with ArchiCAD, is most used BIM software in architectural design. Although ...

  2. BZOJ4317: Atm的树

    Description Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径都有边权,一个神秘的声音告诉他, ...

  3. [USACO3.2]Sweet Butter

    题目大意: 给定一张$k$个结点,$m$条边的无向图,其中有$n$个点被标记,在这$k$个点中找出一个点使得这个点到那$n$个点的最短距离之和最小,求出这个距离和. 思路: 对于每个标记结点跑最短路, ...

  4. consul vs etcd3

    https://sysadmin.libhunt.com/project/etcd/vs/consul

  5. dubbox REST服务使用fastjson替换jackson

    上一节讲解了resteasy如何使用fastjson来替换默认的jackson,虽然dubbox内部采用的就是resteasy,但是大多数情况下,dubbox服务是一个独立的app,并不需要以war包 ...

  6. Supported Values for @SuppressWarnings(转)

    Update July 2011: This list has been reviewed and made current with the most recent Eclipse 3.7 rele ...

  7. Context Switching on the Cortex-M3

    http://coactionos.com/embedded%20design%20tips/2013/10/09/Tips-Context-Switching-on-the-Cortex-M3/ T ...

  8. echarts 去掉网格线

    去掉 xAxis : [ splitLine:{ show:false }], yAxis : [ splitLine:{ show:false }]

  9. [Office Web Apps]实现在线office文档预览

    摘要 在使用office web apps实现office文档在线预览的时候,需要注意的地方. web api web api作为owa在线预览服务回调的接口,这里面核心代码片段如下: using H ...

  10. AngularJS路由系列(5)-- UI-Router的路由约束、Resolve属性、路由附加数据、路由进入退出事件

    本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● UI-Router约束路由参数● UI-Router的Resolve属性● UI-Router给路由附加数据● UI- ...