日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ 8 一种排序

發布時間:2024/10/6 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 8 一种排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊打開鏈接

一種排序

時間限制: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; }
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的NYOJ 8 一种排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。