点击打开链接

一种排序

时间限制: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

AC代码:2ms


#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
using namespace std;
struct node{int mark,lon,wid;
}str[10005];
bool cmp(node a,node b)
{if(a.mark<b.mark)return true; else if(a.lon<b.lon&&a.mark==b.mark)return true;else if(a.lon==b.lon&&a.mark==b.mark&&a.wid<b.wid)return true;return false;
}
int main()
{int n,m,i,t,j;scanf("%d",&n);while(n--){memset(str,0,sizeof(str));scanf("%d",&m);for(i=0;i<m;i++){scanf("%d%d%d",&str[i].mark,&str[i].lon,&str[i].wid);    if(str[i].lon<str[i].wid)swap(str[i].lon,str[i].wid); //长>宽 for(j=0;j<i;j++)if(str[i].mark==str[j].mark&&str[i].lon==str[j].lon&&str[i].wid==str[j].wid){m--;i--;
//如果跟前面已经输入过的i组数据有相同的,这里用i--方式在下一次输入的时候覆盖掉,用m--记录有效数据数量。 }}sort(str,str+m,cmp);//也可以sort之后再查重 for(i=0;i<m;i++)printf("%d %d %d\n",str[i].mark,str[i].lon,str[i].wid);}return 0;
}

AC代码:4ms

优先队列

#include<bits/stdc++.h>
#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;
struct node
{int x;//宽 int y;//长 int z;//编号 friend bool operator<(node p, node q){if ((q.y == p.y) && (q.z == p.z)){return q.x < p.x;}else{if (q.z == p.z){return q.y < p.y;}else{return q.z < p.z;}}}
}s;
int main()
{int n, m;scanf("%d", &n);for (int i = 0; i < n; i++){priority_queue<node>que;scanf("%d", &m);for (int j = 0; j < m; j++){scanf("%d%d%d", &s.z, &s.y, &s.x);if(s.y<s.x)swap(s.y,s.x);que.push(s);}while (!que.empty()){int a[3] = { que.top().z, que.top().y, que.top().x };/*if (a[2]>a[1]){int tmp = a[2];a[2] = a[1];a[1] = tmp;}*/que.pop();while ( !que.empty()&&(a[0] == que.top().z) && (a[1] == que.top().y) && (a[2] == que.top().x)){que.pop();}printf("%d %d %d\n", a[0],a[1],a[2]);}}//system("pause");return 0;
}

AC代码:10ms

//#include<bits/stdc++.h>
#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;
const int MAX=1e3+5;
struct node{int id;//编号int l;//长int w;//宽
};
bool cmp(node a,node b)
{if(a.id==b.id){if(a.l==b.l)return a.w<b.w;return a.l<b.l;}return a.id<b.id;
}
vector<node> a;
int main()
{ios::sync_with_stdio(0);int n;cin>>n;while(n--){int m;cin>>m;a.clear();int id,l,w;for(int i=0;i<m;i++){cin>>id>>l>>w;if(l<w)swap(l,w);bool flag=0;for(int j=0;j<i;j++)if(a[j].id==id&&a[j].l==l&&a[j].w==w) flag=1;   if(!flag){node t;t.id=id;t.l=l;t.w=w;a.push_back(t);}}sort(a.begin(),a.end(),cmp);for(int i=0;i<a.size();i++){cout<<a[i].id<<" "<<a[i].l<<" "<<a[i].w<<endl;}}return 0;
}

NYOJ 8 一种排序相关推荐

  1. 数据结构(三) 用java实现七种排序算法。

    很多时候,听别人在讨论快速排序,选择排序,冒泡排序等,都觉得很牛逼,心想,卧槽,排序也分那么多种,就觉得别人很牛逼呀,其实不然,当我们自己去了解学习后发现,并没有想象中那么难,今天就一起总结一下各种排 ...

  2. Java两种排序方式快慢比较

    2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...

  3. php主要算法设计,四种排序算法设计(PHP)

    标签 详细分析 /** * 四种排序算法设计(PHP) * * 1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当 ...

  4. 位图排序 大数据_干货分享:大话12种排序算法

    干货分享:大话12种排序算法 常见的排序算法: 快速排序.堆排序.归并排序.选择排序 插入排序.二分插入排序 冒泡排序.鸡尾酒排序 桶排序.计数排序.基数排序.位图排序 技能点: 1.归并排序在O(N ...

  5. 基于FPGA的几种排序算法总结

    目录 1      冒泡法和比较排序法 1.1        算法原理 1.2        仿真结果 1.3        算法优缺点 2      并行全比较排序法 2.1        算法原理 ...

  6. php常见的几种排序以及二分法查找

    <?php 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49] 38 65 97 ...

  7. 10种排序算法基础总结

    基于比较的排序: 基础排序:  冒泡排序:谁大谁上,每一轮都把最大的顶到天花板 效率太低--掌握swap. 选择排序:效率较低,但经常用它内部的循环方式来找最大值和最小值. 插入排序:虽然平均效率低, ...

  8. 郑州尚学堂:JAVA常用4种排序方法

    JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 当然 程序中最简单的使用就是:快速排序和冒泡排序,插入排序的使用更具有技巧性,选择排序则过于复杂,冗杂 ...

  9. 五种排序方式gif展示【python】

    简述 有五种排序方式. 文章目录 简述 排序 简单排序 冒泡排序 选择排序 归并排序 快速排序 排序 简单排序 import numpy as np import matplotlib.pyplot ...

最新文章

  1. java基本数据类型自动转包装类_java基本数据类型和包装类相互转换
  2. lms自适应滤波器实现噪声干扰的语音恢复_ZLG深度解析语音识别技术
  3. MySQL查询count(*)、count(1)、count(field)的区别收集
  4. java数学系统总结与展望_总结与展望
  5. 桥接(Bridge)
  6. PAT L1-019. 谁先倒
  7. coin3d碰撞检测的实现
  8. 极客大学python训练营目录_极客大学算法训练营笔记
  9. Thief-Book v1.0.1免费版
  10. 第 2-3 课:迭代法计算定积分
  11. 平移计算机图形学代码注释,求代码注释:计算机图形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢...
  12. 二值图像blob分析
  13. 爬取17k小说网的小说
  14. Java 程序员常用的开发工具
  15. Web前端开发之CSS学习笔记10—栅格布局(网格布局)
  16. 提示:您在 /var/cache/apt/archives/ 上没有足够的可用空间,已解决
  17. 微信小程序分类及详情信息模块的分析
  18. PlatformIO平台下Arduino的开发过程-基于Visual Studio Code平台
  19. drf结合Jwt和IsAuthenticated对用户进行登录验证
  20. 57并查集:网络交友

热门文章

  1. xlrd对excel单列处理
  2. js-ajax-04
  3. opentesty--luasocket 安装
  4. Linux下C程序的可扩展性.
  5. FTP协议常用COMMAND和状态码
  6. 我的团队[六]———功夫在诗外
  7. java代码实现购物车小程序_使用Taro实现小程序商城的购物车功能模块的实例代码...
  8. 驱动依赖_「世经研究」焦炭行业--仍旧依赖政策驱动
  9. java media_unmount file_(20120801)android文件的读写SD卡总结
  10. centos安装python3小白_在Linux CentOS7 下安装 python3