zoukankan      html  css  js  c++  java
  • nyoj08 一种排序

    这道题在分类中属于STL,写了两种解法

    1、很容易直接想到三层遍历进行排序,我写得比较暴力,时间消耗较大,不推荐

    #include <iostream>
    using namespace std;
    struct Rect{
        int id,a,b;
    }f[1001];
    
    int main() {
        int n;
        cin>>n;
        while(n--){
            int m;
            cin>>m;
        //输入
    for(int i=0;i<m;i++){ cin>>f[i].id>>f[i].a>>f[i].b; if(f[i].a<f[i].b){ int temp = f[i].a; f[i].a = f[i].b; f[i].b = temp; } }
        //排序
    for(int i=0;i<m;i++){ for(int j = i+1;j<m;j++){ if(f[i].id>f[j].id){ rtg temp = f[i]; f[i] = f[j]; f[j] = temp; }else if(f[i].id==f[j].id&&f[i].a>f[j].a){ rtg temp = f[i]; f[i] = f[j]; f[j] = temp; }else if(f[i].id==f[j].id&&f[i].a==f[j].a&&f[i].b>f[j].b){ rtg temp = f[i]; f[i] = f[j]; f[j] = temp; } } }
        //标记去重
    for(int i=0;i<m;i++){ for(int j = i+1;j<m;j++){ if(f[i].id==f[j].id){ if(f[i].a==f[j].a){ if(f[i].b==f[j].b){ flag[j] = 1; } } } } } for(int i=0;i<m;i++){ if(flag[i]==0){ cout<<f[i].id<<" "<<f[i].a<<" "<<f[i].b<<endl; } } } return 0; }

    2、用到set,set好处是没有重复元素和内部有序,这两点都符合题意

    #include <iostream>
    #include<set>
    using namespace std;
    struct Rect{
        int id,a,b;
      //运算符重载
    bool operator <(const Rect& r)const{ return this->id != r.id ? this->id < r.id : (this->a != r.a ? this->a < r.a : this->b < r.b); } }; set<Rect> s; int main() { int n,id,a,b; Rect r; cin>>n; while(n--){ int m; cin>>m; s.clear(); while(m--){ cin>>id>>a>>b; if(a<b){ swap(a,b); } Rect r; r.id = id,r.a = a;r.b = b; s.insert(r); } set<Rect>::iterator iter = s.begin(); while(iter!=s.end()){ cout<<iter->id<<" "<<iter->a<<" "<<iter->b<<endl; iter++; } } return 0; }
  • 相关阅读:
    [html]Sublime Text添加插件
    [C#.Net]判断文件是否被占用的两种方法
    C#中隐式运行CMD命令行窗口的方法
    [C#.Net]启动外部程序的几种常用方法汇总
    C# 管理员身份运行程序
    [C#.net]PostMessage与SendMessage的区别
    [C#.net] SendMessage
    由浅入深了解Thrift之客户端连接池化续
    由浅入深了解Thrift之客户端连接池化
    由浅入深了解Thrift之服务模型和序列化机制
  • 原文地址:https://www.cnblogs.com/zhaoGavin/p/8627802.html
Copyright © 2011-2022 走看看