• 一种排序


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

    //C++
    /**
      * @author(s):namespace
      * @date: 2013-04-26 15:32:21
      * @func: acm--一种排序
      * @param:
      * @input:
      * @output:
      * @return:
      * @time coplexity:0
      * @space coplexity:228
    */
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long l;
    int main(){
      l n,m,a,b,c,x,y,t,i;
      cin>>n;
      while(n--){
          cin>>m;
          l p[10000];
          i=0;
          while(i<m){
              cin>>a>>b>>c;
              if(b<c)t=b,b=c,c=t;
              p[i++]=a<<32|b<<16|c;
            }
          sort(p,p+m);
          i=y=0;
          while(i<m){
              x=p[i++];
              if(x!=y)
                y=x,cout<<short(x>>32)<<" "<<short(x>>16)<<" "<<short(x)<<endl;
            }
        }
    }



    //C++

    /**
      * @张云聪
      * @ date: 2010-09-28 15:13:43
      * @func: acm--一种排序
      * @param:
      * @input:
      * @output:
      * @return:
      * @time coplexity:8
      * @space coplexity:312
    */
    #include<iostream>
    #include<set>
    #include<iterator>
    using namespace std;
    struct Rect
    {
        int num,length,width;

    };
    bool operator<(const Rect& r1,const Rect& r2)
    {
        return r1.num<r2.num || r1.num==r2.num && r1.length<r2.length ||r1.num==r2.num&&r1.length==r2.length &&r1.width<r2.width;
    }
    istream& operator>>(istream& in,Rect& r)
    {
        in>>r.num;
        int a,b;
        cin>>a>>b;
        r.length=max(a,b);
        r.width=min(a,b);
        return in;
    }
    ostream& operator<<(ostream& out,const Rect& r)
    {
        return out<<r.num<<" "<<r.length<<" "<<r.width;
    }
    int main()
    {
        int num;
        cin>>num;
        while(num--)
        {
            set<Rect> rs;
            Rect r;
            int n;
            cin>>n;
            while(n--)
            {
                cin>>r;
                rs.insert(r);
            }
            copy(rs.begin(),rs.end(),ostream_iterator<Rect>(cout," "));

        }


    }



    //V1.0 C
    /**
      * @scictor@gmail.com
      * @ date: 2012-06-03
      * @func: acm--一种排序
      * @param:
      * @input:
      * @output:
      * @return:
      * @time coplexity:8
      * @space coplexity:240
    */
    #include <stdio.h>
    #include <stdlib.h>

    void swap(int *a, int *b);
    int main(int argc, char *argv[])
    {
      int n;
      int m;
      scanf("%d", &n);
      getchar();
      int i;
      int j;
      while (n--) {
          scanf("%d", &m);
          getchar();
          int arr[1000][3];
          for(i=0;i<m;i++){
              for(j=0;j<3;j++){
                  scanf("%d", &arr[i][j]);
                }
            }

          //sort length & width
          for(i=0;i<m;i++){
              for(j=1;j<2;j++){
                  if(arr[i][j] < arr[i][j+1]){
                      swap(&arr[i][j],&arr[i][j+1]);
                      /*tmp = arr[i][j];
                      arr[i][j] = arr[i][j+1];
                      arr[i][j+1] = tmp;*/
                    }
                }
            }


          for (i = 0; i < m; ++i) {
              for (j = i+1; j < m; ++j) {
                  //seq =
                  if(arr[i][0] == arr[j][0]){


                      //seq =,then length =
                      if(arr[i][1] == arr[j][1]){

                          //length =,then width =
                          if(arr[i][2] == arr[j][2]){
                              int k;
                              for(k=j;k<m-1;k++){
                                  arr[k][0]=arr[k+1][0];
                                  arr[k][1]=arr[k+1][1];
                                  arr[k][2]=arr[k+1][2];
                                }
                              --m;
                              /*arr[j][0] = 0;
                              arr[j][1] = 0;
                              arr[j][2] = 0;*/
                              //length =,then width !=
                            }else if (arr[i][2] > arr[j][2]) {
                              swap(&arr[i][2], &arr[j][2]);
                            }

                          // seq =,then length !=
                        }else if (arr[i][1] > arr[j][1]) {
                          swap(&arr[i][1], &arr[j][1]);
                          swap(&arr[i][2], &arr[j][2]);
                        }


                      //seq !=
                    }else if (arr[i][0] > arr[j][0]) {
                      swap(&arr[i][0], &arr[j][0]);
                      swap(&arr[i][1], &arr[j][1]);
                      swap(&arr[i][2], &arr[j][2]);
                    }
                }


            }

          for(i=0;i<m;i++){
              for(j=0;j<3;j++){
                  printf("%d ", arr[i][j]);
                }
              printf(" ");
            }

        }
      //while

      return 0;
    }

    void swap(int *a, int *b){
      int tmp;
      tmp = *a;
      *a = *b;
      *b = tmp;
    }

  • 相关阅读:
    Mongodb对数据库(DB)的常用操作
    Mongodb下载地址
    SpringCloud之搭建配置中心
    一个还不错的源码解析网站
    SpringBoot之配置google kaptcha
    caffe的python接口学习(4):mnist实例---手写数字识别
    caffe的python接口学习(3):训练模型(training)
    caffe的python接口学习(2):生成solver文件
    caffe的python接口学习(1):生成配置文件
    python数字图像处理(19):骨架提取与分水岭算法
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/5589692.html
Copyright © 2020-2023  润新知