1024_01排序

01排序

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

比赛描述

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

输入

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

输出

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

样例输入

10011111
00001101
1010101
1
0
1100

样例输出

0
1
1100
1010101
00001101
10011111

题目来源

ZJUT


算法思路:用容器去解决问题

代码如下:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool comp(string  str1, string  str2);
int main()
{
	vector<string> vec;
	string str;
	while (cin >> str)//输入
		vec.push_back(str);
	sort(vec.begin(), vec.end(), comp);//排序

	/*for (auto c : vec)
		cout << c << endl;*/
	//g++编译器不兼容以上语法,顾采用下面的方法输出
	vector<string>::iterator ite;//输出
	for (ite = vec.begin(); ite != vec.end(); ite++)
		cout << *ite << endl;

	return 0;
}

bool comp(string  str1, string  str2)//比较函数
{
	if (str1.size() != str2.size())
		return str1.size() < str2.size();
	else if (count(str1.begin(), str1.end(), '1') != count(str2.begin(), str2.end(), '1'))
		return count(str1.begin(), str1.end(), '1') < count(str2.begin(), str2.end(), '1');
	else
		return str1 < str2;
}


你可能感兴趣的:(ACM,OJ,1024,南邮,01排序)