/*
一种排序

时间限制: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. jquery获取系统当前时间

    //判断是否在前面加0function getNow(s) { return s < 10 ? '0' + s: s;} var myDate = new Date(); var year=my ...

  2. CTSC被虐记

    退役前写写破事乐呵乐呵..(雾 Day0 愉快的没有分到另一个宾馆...但是是个单间...而且居然是大床房...难以置信, 试机向BeiYe学习了一发Gedit的外部工具, 试到一般好像都走了..只剩 ...

  3. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem L. Stock Trading Robot 水题

    Problem L. Stock Trading Robot 题目连接: http://www.codeforces.com/gym/100253 Description CyberTrader is ...

  4. activiti流程

    package cn.demo.service.impl; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  5. 李善友《认知升级之第一性原理》--507张PPT全解!_搜狐科技_搜狐网

      http://www.sohu.com/a/151470602_733114

  6. 上传APP加入视频预览--精简点名

    上传APP加入视频预览--精简点名 在为精简点名APP制作视频预览时的坑: 1.视频预览不能太长.也不能太短15-30s就好.我录制的是18s 2.视频的帧数不能太大.也就是说你在录制视频的时候.要慢 ...

  7. oracle定时任务的编写及查看删除

    declare jobno number; begin dbms_job.submit( jobno,--定时器ID,系统自动获得 'PRC_INSERT;', --what执行的过程名 sysdat ...

  8. Visual Studio 2015 update 2 setup fails with "missing or damaged package kb3022398"

    Question     Hi, I wanted to install Visual Studio Professional 2015 Update 2 from my MSDN abo (web ...

  9. 在qemu模拟的aarch32上使用kgtp

    KGTP 介绍 KGTP 是一个能在产品系统上实时分析 Linux 内核和应用程序(包括 Android)问题的全面动态跟踪器. 使用 KGTP 不需要 在 Linux 内核上打 PATCH 或者重新 ...

  10. netty 自定义通讯协议

    Netty中,通讯的双方建立连接后,会把数据按照ByteBuf的方式进行传输,例如http协议中,就是通过HttpRequestDecoder对ByteBuf数据流进行处理,转换成http的对象.基于 ...