南邮 OJ 1024 01排序

来源:互联网 发布:淘宝开店协议点同意 编辑:程序博客网 时间:2024/05/29 02:08


01排序

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

比赛描述

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 <algorithm>#define  MAXNUM 256using namespace std;bool compareBy1s(string str0,string str1){if(count(str0.begin(),str0.end(),'1')<count(str1.begin(),str1.end(),'1')){return 1;}else if(count(str0.begin(),str0.end(),'1')>count(str1.begin(),str1.end(),'1')){return 0;}else{return str0<str1;}}bool compare(string str0,string str1){if(str0.length()<str1.length()){return 1;}else if(str0.length()>str1.length()){return 0;}else{return compareBy1s(str0,str1);}}int main(void){string str[MAXNUM];int i=0,n=0;while(cin>>str[n++]);--n;stable_sort(str,str+n,compare);for(i=0;i<n;++i){cout<<str[i]<<endl;}}



0 0