• ACM——01排序


    http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1024

    01排序

    时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
    总提交:708            测试通过:258

    描述

    01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序。

    输入

    输入数据中含有一些01串,01串的长度不大于256个字符。

    输出

    重新排列01串的顺序。使得串按基本描述的方式排序。

    样例输入

    10011111
    00001101
    1010101
    1
    0
    1100

    样例输出

    0
    1
    1100
    1010101
    00001101
    10011111

    题目来源

    ZJUT

     

     1 #include<iostream>
     2 #include<string>
     3 //#include<fstream>
     4 #include<vector>
     5 using namespace std;
     6 class Node
     7 {
     8 public:
     9     string str;
    10     int len;
    11     int oneNum;
    12     Node(string s)
    13     {
    14         str = s;
    15         this->len = str.length();
    16         int tmp = 0;
    17         for (size_t i = 0; i<len; i++)
    18         if (str[i] == '1') tmp++;
    19         oneNum = tmp;
    20     }
    21 };
    22 
    23 int cmp(Node& node1, Node& node2)//-1表示node1排在前面0表示node1和node2相等1表示node1排在node2后面
    24 {
    25     if (node1.len<node2.len)
    26         return -1;
    27     else if (node1.len>node2.len) return 1;
    28     else //长度相等
    29     {
    30         if (node1.oneNum == node2.oneNum)//一的数目相等
    31         {
    32             size_t i;
    33             for (i = 0; i<node1.len; i++){//比较ASCLL码值
    34                 if (node1.str[i]<node2.str[i]) return -1;
    35                 else if (node1.str[i]>node2.str[i]) return 1;
    36             }
    37             if (i == node1.oneNum) return 0;//二者相等
    38         }
    39         else if (node1.oneNum<node2.oneNum) return -1;
    40         else //node1中1的数目比node2的多
    41             return 1;
    42     }
    43     return 0;
    44 }
    45 int main()
    46 {
    47     //ifstream ifile("D:\eee.txt");
    48     string str;
    49     vector<Node> nVec;
    50     while (cin>>str)
    51     {
    52         Node node(str);
    53         if (true == nVec.empty())
    54             nVec.push_back(node);
    55         else
    56         {
    57             vector<Node>::iterator iter = nVec.begin();
    58             for (iter; iter != nVec.end(); iter++){
    59                 if (cmp(*iter, node) == 1){
    60                     nVec.insert(iter, node);
    61                     break;
    62                 }
    63                 if (cmp(*iter, node) == 0){
    64                     nVec.insert(iter, node);
    65                     break;
    66                 }
    67                 if (cmp(*iter, node) == -1)
    68                     ;
    69                 if (iter == nVec.end()-1){
    70                     //nVec.insert(iter, node);
    71                     nVec.push_back(node);
    72                     break;
    73                 }
    74 
    75             }
    76 
    77         }
    78     }
    79     for (size_t i = 0; i<nVec.size(); i++)
    80     {
    81         cout << nVec[i].str << endl;
    82     }
    83     return 0;
    84 }

     

     

  • 相关阅读:
    读《高效能人士的七个习惯》有感
    Springboot中的日志
    fastjson JSON.toJavaObject() 实体类首字母大写属性无法解析问题
    java多线程编程实例
    IDEA插件配置推荐
    Spring Boot 自定义数据源 DruidDataSource
    zookeeper环境搭建
    eureka注册中心的使用
    记事本编码
    Chrome浏览器基本操作
  • 原文地址:https://www.cnblogs.com/BasilLee/p/3861547.html
Copyright © 2020-2023  润新知