时间限制: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
1 /************************************************************************* 2 > File Name: 8.cpp 3 > Author: MarkFo 4 > Mail: [email protected] 5 > Created Time: 2018-02-12 17:09:37 6 ************************************************************************/ 7 8 #include <iostream> 9 #include <algorithm> 10 #include <string.h> 11 #include <string> 12 #include <stdio.h> 13 #include <stdlib.h> 14 using namespace std; 15 16 struct Node{ 17 int a; 18 int b; 19 int c; 20 }; 21 22 bool cmp(Node node1, Node node2) 23 { 24 if (node1.a != node2.a) 25 { 26 return node1.a < node2.a; 27 } 28 else if (node1.b != node2.b) 29 { 30 return node1.b < node2.b; 31 } 32 else if (node1.c != node2.c) 33 { 34 return node1.c < node2.c; 35 } 36 } 37 38 int main() 39 { 40 int t; 41 Node arr[1005]; 42 cin >> t; 43 while (t--) 44 { 45 int tt; 46 cin >> tt; 47 for (int i = 0; i < tt; ++i) 48 { 49 cin >> arr[i].a >> arr[i].b >> arr[i].c; 50 if (arr[i].b < arr[i].c) 51 { 52 int tmp; 53 tmp = arr[i].b; 54 arr[i].b = arr[i].c; 55 arr[i].c = tmp; 56 } 57 } 58 59 stable_sort(arr, arr+tt, cmp); 60 61 int flag[1005] = {0}; 62 for (int i = 1; i < tt; ++i) 63 { 64 if (arr[i].a == arr[i-1].a && arr[i].b == arr[i-1].b && arr[i].c == arr[i-1].c) 65 { 66 flag[i] = 1; 67 } 68 } 69 70 for (int i = 0; i < tt; ++i) 71 { 72 if (flag[i] == 0) 73 { 74 cout << arr[i].a << " " << arr[i].b << " " << arr[i].c << endl; 75 } 76 } 77 } 78 79 return 0; 80 }