3413:【例71.2】 01串排序

973 篇文章 38 订阅
835 篇文章 5 订阅

3413:【例71.2】 01串排序

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

[例 71.2] 01 串排序

信息学奥赛一本通-编程启蒙(C++版)在线评测系统




//01串排序
#include <bits/stdc++.h>
using namespace std;

struct Comp
{
	bool operator()(const string &s1,const string &s2)const
	{
		if(s1.length()!=s2.length())//先按长度排序
      		return s1.length()<s2.length();
    	int c1=count(s1.begin(),s1.end(),'1');
    	int c2=count(s2.begin(),s2.end(),'1');
    	return c1!=c2?c1<c2:s1<s2;//按1的个数排序,若相同按ASCII码排序
  	}
};

int main()
{
	//freopen("Sort01.in","r",stdin);
	//freopen("Sort01.out","w",stdout);
	multiset<string,Comp>ms;
	int n;
	cin>>n;
	string s;
	for(int i=1; i<=n; i++)
  	{
    	cin>>s;
    	ms.insert(s) ;
  	}
  	for(multiset<string,Comp>::iterator it=ms.begin(); it!=ms.end(); it++)
    	cout<<*it<<endl;
  	return 0;
}


#include <bits/stdc++.h>
using namespace std;
bool cmp(string x,string y){
	int lx=x.size(),ly=y.size();
	int ox=0,oy=0;
	for(int i=0;i<lx;i++) ox+=x[i]-48;
	for(int i=0;i<ly;i++) oy+=y[i]-48;
	return lx<ly||
		lx==ly&&ox<oy||
		lx==ly&&ox==oy&&x<y;
}
int main()
{
	int n;string a[105];
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	sort(a,a+n,cmp);
	for(int i=0;i<n;i++) cout<<a[i]<<endl;	
	return 0;
}



 




《信息学奥赛一本通 编程启蒙C++版》3391-3395(5题)

《信息学奥赛一本通 编程启蒙C++版》3391-3395(5题)_信息学一本通启蒙3391-CSDN博客

《信息学奥赛一本通 编程启蒙C++版》3396-3400(5题)

《信息学奥赛一本通 编程启蒙C++版》3396-3400(5题)_3400:【例69.3】 字符串中的空格-CSDN博客

《信息学奥赛一本通 编程启蒙 C++版》 3391-3400(10题)

《信息学奥赛一本通 编程启蒙 C++版》 3391-3400(10题)_3391:【例68.2】 简单密码-CSDN博客

《信息学奥赛一本通 编程启蒙C++版》3401-3405(5题)

《信息学奥赛一本通 编程启蒙C++版》3401-3405(5题)_3401:练69.1 单词的长度-CSDN博客

《信息学奥赛一本通 编程启蒙C++版》3406-3410(5题)

《信息学奥赛一本通 编程启蒙C++版》3406-3410(5题)_3409:练70.1 验证子串-CSDN博客

41、《信息学奥赛一本通 编程启蒙 C++版》 3401-3410(10题)

41、《信息学奥赛一本通 编程启蒙 C++版》 3401-3410(10题)_3407:【例70.2】 求a-b字符串-CSDN博客

《信息学奥赛一本通 编程启蒙C++版》3411-3415(5题)

《信息学奥赛一本通 编程启蒙C++版》3411-3415(5题)_3412:【例71.1】 字典序排序-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dllglvzhenfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值