一種排序
時間限制: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
#include <set> #include <iostream> #include <algorithm> using namespace std; struct Rectrangle{ int num; int length; int width; Rectrangle(int num_ = 0,int length_ = 0 , int width_ = 0) : num(num_), length(length_), width(width_){} bool operator < (const Rectrangle& a) const{ if(num!=a.num) return num < a.num; else if(length!=a.length) return length< a.length; else return width < a.width; } }; int main(){ int n; cin >> n; while(n--){ int m; cin >> m; set<Rectrangle> rect; for(int i = 0 ; i < m ; ++i){ int num,length,width; cin >>num >> length >>width; if(length < width) swap(length,width); rect.insert(Rectrangle(num,length,width)); } for(set<Rectrangle>::iterator iter = rect.begin(); iter!=rect.end(); iter++){ cout<<iter->num<<" "<<iter->length<<" "<<iter->width<<endl; } } }