51Nod1097 拼成最小的数(技巧排序)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/85213694

排序规则:

两个字符串a,b。

如果ab<ba 那就a在b之前。

比如a=312,b=31.

31231<31312

所以312在31之前。

排完序就是按照规则输出就行了。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
using namespace std;
bool cmp(string a,string b)
{
	string s1=a+b;
	string s2=b+a;
	return s1<s2;
}
int main()
{
	string str[10005];
	int n,i;
	cin>>n;
	for(i=0;i<n;i++)
		cin>>str[i];
	sort(str,str+n,cmp);
	int len=0;
	for(i=0;i<n;i++)
	{
		len+=str[i].length();
		if(len>=1000)
		{
			len-=str[i].length();
			for(int j=0;j<str[i].length();j++)
			{
				cout<<str[i][j];
				len++;
				if(len==1000)
					cout<<endl;
			}
		}
		else
			cout<<str[i];
		len%=1000;
	}
	cout<<endl;
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/85213694