题目链接 http://acm.nyist.net/JudgeOnline/problem.php?pid=8
这道题,用到了STL里面的sort排序。需要注意的是长方形的 长 和 宽 提前没有确定,要自己提前确定(大的数是长,小的数是宽)。
代码:
#include<iostream> #include<cstring> #include<algorithm> //sort排序所需要的头文件 using namespace std; struct qq //用结构体保存每一个长方形的编号、长、宽 { int x; int l; int w; }a[10005]; bool com(qq a,qq b) //这个额sort排序便实现了先按照编号排序,再按照长,再按照宽排序 { if(a.x<b.x) //如果前一个的编号<后一个的编号,返回真 return true; else if(a.x==b.x&&a.l<b.l) //如果编号相等&&前一个的长>后一个的长,返回真 return true; else if(a.x==b.x&&a.l==b.l&&a.w<b.w) //如果编号、长相等&&前一个的宽>后一个的宽,返回真 return true; else return false; //其它情况返回假 } int main() { int n,m; cin>>n; while(n--) { memset(a,0,sizeof(a)); //让a数组每一个元素都等于0,方便下面的去重 cin>>m; for(int i=0;i<=m-1;i++) { cin>>a[i].x>>a[i].l>>a[i].w; if(a[i].w>a[i].l) //题目说大的数是长,小的数是宽,所以要提前选择好长和宽 { int t=a[i].w; a[i].w=a[i].l; a[i].l=t; } } sort(a,a+m,com); for(int i=0;i<=m-1;i++) { if(a[i+1].x!=a[i].x||a[i+1].l!=a[i].l||a[i+1].w!=a[i].w) //去重操作 cout<<a[i].x<<' '<<a[i].l<<' '<<a[i].w<<endl; } } return 0; }