Description:
将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序。
Input:
输入数据中含有一些01串,01串的长度不大于256个字符。
Output:
重新排列01串的顺序。使得串按基本描述的方式排序。
Sample Input:
10011111
00001101
1010101
1
0
1100
Sample Output:
0
1
1100
1010101
00001101
10011111
Note:
本题由旧版NOJ导入,来源:ZJUT
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <climits>
#include <stdio.h>
#include <iomanip>
#include <math.h>
#include <list>
#include <queue>
#include <tuple>
#include <stack>
#include <string.h>
using namespace std;
bool mycmp(const string& A, const string& B)
{
if(A.size() < B.size())
return true;
else if(A.size() > B.size())
return false;
int countA = 0;
int countB = 0;
for(int i = 0; i < A.size(); i++)
{
if(A[i] == '1')
countA++;
}
for(int i = 0; i < B.size(); i++)
{
if(B[i] == '1')
countB++;
}
if(countA < countB)
return true;
else if(countA > countB)
return false;
return A < B;
}
int main(void)
{
vector<string> nums;
string tmp;
while(cin >> tmp)
{
nums.push_back(tmp);
}
sort(nums.begin(), nums.end(), mycmp);
for(int i = 0; i < nums.size(); i++)
{
cout << nums[i] << endl;
}
return 0;
}