nyoj8 一种排序

xiaoxiao2021-02-28  79

一种排序

时间限制: 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<bits/stdc++.h> //#include<set> using namespace std; struct ac{ int x,y,z,k; }a[10001]; bool cmp(struct ac q,struct ac w){ if(q.x!=w.x) return q.x<w.x; else if(q.y!=w.y) return q.y<w.y; return q.z<w.z; } int main(){ int n; cin>>n; while(n--){ //set<ac>a[1001]; int m; cin>>m; int l=0; for(int j=0;j<m;j++){ int x1,x2,x3; cin>>x1>>x2>>x3; // bool b=0; if(x2<x3) { swap(x2,x3); // b=1; } bool s=1; for(int i=0;i<l;i++){ if(a[i].y==x2&&a[i].z==x3){ if(a[i].x==x1){ s=0; break; } } } if(s){ a[l].x=x1; a[l].y=x2; a[l].z=x3; // if(b) a[l].k=1; l++; } // cout<<" 1"<<a[l-1].x<<" "<<a[l-1].y<<" "<<a[l-1].z<<endl; } sort(a,a+l,cmp); for(int j=0;j<l;j++){ //if(a[j].k) swap(a[j].y,a[j].z); cout<<a[j].x<<" "<<a[j].y<<" "<<a[j].z<<endl; } } return 0; }

转载请注明原文地址: https://www.6miu.com/read-53222.html

最新回复(0)