luogu1012:拼数:字符拼接与比较

题目连接:该题是luogu试炼场的2-5:T3


题目大意:
1 给n个数字,要求拼接成一个尽可能大的数字


解题思路:
1 第一反应如果是直接排序,就会踩坑
2 以下两种字符比较情况分析:
   1231234 ==>  1234 > 123;拼接后:1234123 没问题
   5675673 ==>  5673 > 567;拼接后:5673567 有问题! 因为 5673567 < 5675673
3 基于以上的分析,比较的条件不能单纯是 a 和 b 的大小比较,应该比较拼接后的效果,也就是 a+b 与 b+a 进行比较;


上代码:

//luogu1012:拼数 
 
//字符的拼接与排序问题
 
#include
#include
#include
using namespace std;

int n;
char a[30][110];
int bj(char x[],char y[])//a与b 的大小,由(a+b)和(b+a)决定 
{
	char u[210],v[210];
	strcpy(u,x);strcat(u,y);
	strcpy(v,y);strcat(v,x);
	return strcmp(u,v);
}
void px(int l,int r)//排序 
{
	int x=l,y=r;
	char m[110];strcpy(m,a[(l+r)/2]);
	while(x<=y)
	{
		while(bj(a[x],m)>0) x++;
		while(bj(a[y],m)<0) y--;
		if(x<=y)
		{
			char k[110];        strcpy(k,a[x]); 
			strcpy(a[x],a[y]);	strcpy(a[y],k);
			x++; y--;
		}	
	}
	if(x

 

你可能感兴趣的:(题解,大礼包,luogu,入门,题表,luogu,1012拼数)