ACM——01排序

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

01排序

時間限制(普通/Java):1000MS/3000MS          運行內存限制:65536KByte
總提交:708            測試經過:258

描述ios

01串首先按長度排序,長度相同時,按1的個數多少進行排序,1的個數相同時再按ASCII碼值排序。測試

輸入this

輸入數據中含有一些01串,01串的長度不大於256個字符。spa

輸出code

從新排列01串的順序。使得串按基本描述的方式排序。blog

樣例輸入排序

10011111
00001101
1010101
1
0
1100
內存

樣例輸出ci

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 }
相關文章
相關標籤/搜索