nyoj8 一种排序(用set)

来源:互联网 发布:九城软件电话 编辑:程序博客网 时间:2024/05/21 08:38

一种排序

时间限制: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 2 1
1 1 2
1 2 2
2 2 1
2 1 1
2 1 2
样例输出
1 1 1
1 2 1
2 1 1
1 2 2
2 2 1


#include <iostream>#include <cstdio>#include <set>#include <iterator>using namespace std;struct node {    int num, length, width;};bool operator < (const node &a, const node &b) {    if(a.num != b.num)        return a.num < b.num;    if(a.length != b.length)        return a.length < b.length;    return a.width < b.width;}ostream & operator << (ostream &out, const node &a) {    return out << a.num << " " << a.length << " " << a.width;}set<node> s;int main() {    int n, m, a, b;    node t;    scanf("%d", &n);    while(n--) {        scanf("%d", &m);        s.clear();        while(m--) {            scanf("%d%d%d", &t.num, &a, &b);            t.length = a >= b ? a : b;            t.width = a <= b ? a : b;            s.insert(t);        }        //set<node>::iterator i;        //for(i = s.begin(); i != s.end(); ++i) {           //printf("%d %d %d\n", (*i).num, (*i).length, (*i).width);        //}       copy(s.begin(), s.end(), ostream_iterator<node>(cout,"\n"));    }    return 0;}


两种输出方式都可以,也可以在重载 << 时加上换行,这样,ostream_iterator<node>()可以只有一个参数cout,即:
ostream & operator << (ostream &out, const node &a) {    return out << a.num << " " << a.length << " " << a.width << endl;}copy(s.begin(), s.end(), ostream_iterator<node>(cout));



关于copy函数的解释:http://blog.csdn.net/jingweihu/article/details/23241269
使用ostream_iterator< >()时,记得引用头文件#include <iterator>


当然输入可以通过重载 >>运算符实现,而且可以更快,然而宝宝懒~~
istream& operator >> (istream& in, node &t) {    in >> t.num;    int a, b;    cin >> a >> b;    t.length = max(a, b);    t.width = min(a, b);    return in;}






0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机的开机密码忘了怎么办 联想手机开机密码忘了怎么办 红米note3忘记开机密码怎么办 小米2忘了密码怎么办 小米笔记本电脑忘记开机密码怎么办 小米笔记本忘记开机密码怎么办 小米手机儿童模式忘记密码怎么办 小米应用锁密码忘了怎么办 小米air密码忘了怎么办 小米4密码忘了怎么办 小米手机开机密码忘了怎么办? 小米笔记本电脑开机密码忘了怎么办 小米笔记本开机密码忘了怎么办 htc手机忘记解锁图案怎么办 红米手机屏幕锁定怎么解锁怎么办 小米5s有id怎么办 手机密码找不回来了怎么办? 手机密码图案忘了怎么办 手机屏幕图案锁忘了怎么办 捡到苹果7有id锁怎么办 魅族什么都忘了怎么办 海信电视百事通登陆失败怎么办 去哪儿换号了怎么办 ipan充不进去电怎么办 安卓数据线松了怎么办 索尼z5耳机掉漆怎么办 索尼z5无限重启怎么办 苹果8基带坏了怎么办 oppo手机忘记图案密码怎么办 电池充不进去电怎么办 电脑充不进去电怎么办 苹果5c白苹果怎么办 港行不支持电信卡怎么办 安卓导航不开机怎么办 鞭炮放一半不响怎么办 禁止鸣笛的地方鸣笛了怎么办 手被炮仗炸了怎么办 手被猴子抓伤了怎么办 炸东西剩的油怎么办 炸臭豆腐剩的油怎么办 油炸久了油发黑怎么办