NYOJ 8 一种排序
点击打开链接
一种排序
- 描述
-
现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);
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 一种排序相关推荐
- 数据结构(三) 用java实现七种排序算法。
很多时候,听别人在讨论快速排序,选择排序,冒泡排序等,都觉得很牛逼,心想,卧槽,排序也分那么多种,就觉得别人很牛逼呀,其实不然,当我们自己去了解学习后发现,并没有想象中那么难,今天就一起总结一下各种排 ...
- Java两种排序方式快慢比较
2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...
- php主要算法设计,四种排序算法设计(PHP)
标签 详细分析 /** * 四种排序算法设计(PHP) * * 1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当 ...
- 位图排序 大数据_干货分享:大话12种排序算法
干货分享:大话12种排序算法 常见的排序算法: 快速排序.堆排序.归并排序.选择排序 插入排序.二分插入排序 冒泡排序.鸡尾酒排序 桶排序.计数排序.基数排序.位图排序 技能点: 1.归并排序在O(N ...
- 基于FPGA的几种排序算法总结
目录 1 冒泡法和比较排序法 1.1 算法原理 1.2 仿真结果 1.3 算法优缺点 2 并行全比较排序法 2.1 算法原理 ...
- php常见的几种排序以及二分法查找
<?php 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49] 38 65 97 ...
- 10种排序算法基础总结
基于比较的排序: 基础排序: 冒泡排序:谁大谁上,每一轮都把最大的顶到天花板 效率太低--掌握swap. 选择排序:效率较低,但经常用它内部的循环方式来找最大值和最小值. 插入排序:虽然平均效率低, ...
- 郑州尚学堂:JAVA常用4种排序方法
JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 当然 程序中最简单的使用就是:快速排序和冒泡排序,插入排序的使用更具有技巧性,选择排序则过于复杂,冗杂 ...
- 五种排序方式gif展示【python】
简述 有五种排序方式. 文章目录 简述 排序 简单排序 冒泡排序 选择排序 归并排序 快速排序 排序 简单排序 import numpy as np import matplotlib.pyplot ...
最新文章
- java基本数据类型自动转包装类_java基本数据类型和包装类相互转换
- lms自适应滤波器实现噪声干扰的语音恢复_ZLG深度解析语音识别技术
- MySQL查询count(*)、count(1)、count(field)的区别收集
- java数学系统总结与展望_总结与展望
- 桥接(Bridge)
- PAT L1-019. 谁先倒
- coin3d碰撞检测的实现
- 极客大学python训练营目录_极客大学算法训练营笔记
- Thief-Book v1.0.1免费版
- 第 2-3 课:迭代法计算定积分
- 平移计算机图形学代码注释,求代码注释:计算机图形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢...
- 二值图像blob分析
- 爬取17k小说网的小说
- Java 程序员常用的开发工具
- Web前端开发之CSS学习笔记10—栅格布局(网格布局)
- 提示:您在 /var/cache/apt/archives/ 上没有足够的可用空间,已解决
- 微信小程序分类及详情信息模块的分析
- PlatformIO平台下Arduino的开发过程-基于Visual Studio Code平台
- drf结合Jwt和IsAuthenticated对用户进行登录验证
- 57并查集:网络交友
热门文章
- xlrd对excel单列处理
- js-ajax-04
- opentesty--luasocket 安装
- Linux下C程序的可扩展性.
- FTP协议常用COMMAND和状态码
- 我的团队[六]———功夫在诗外
- java代码实现购物车小程序_使用Taro实现小程序商城的购物车功能模块的实例代码...
- 驱动依赖_「世经研究」焦炭行业--仍旧依赖政策驱动
- java media_unmount file_(20120801)android文件的读写SD卡总结
- centos安装python3小白_在Linux CentOS7 下安装 python3