75,第四个点MLE了,求助
查看原帖
75,第四个点MLE了,求助
573404
该不会是aha吧楼主2022/2/10 10:37
#include<bits/stdc++.h>

using namespace std;

const int N=20;
string str[N];

bool cmp(string a,string b)
{	
	if(a.size()==b.size()) return a>b;//若等长则直接利用string性质判断 
	
	else//若不等长 
	{
		int cnt=0,len=min(a.size(),b.size());
		for(int i=0;i<len;i++)
		{
			if(a[i]>b[i]) return true;
			else if(a[i]<b[i]) return false;
			if(a[i]==b[i]) cnt++;
		}
		if(cnt==len)//如果两者为字母串 
		{
			if(a.size()>b.size())
			{
				string c=a.substr(0,b.size()),d=a.substr(b.size());
				return cmp(c,d);//将多出来的部分再与前缀比较,如a==1234,b==123,多出的部分为4,与123比较 
			}
			else
			{
				string c=b.substr(0,b.size()),d=b.substr(b.size());
				return cmp(d,c);//***
			}
		}
	}
}

void qsort(int l,int r)//快排思想 
{
	if(l>=r) return;
	
	string x=str[l+r>>1];
	int i=l-1,j=r+1;
	while(i<j)
	{
		do i++;while(cmp(str[i],x));
		do j--;while(cmp(x,str[j]));
//		cout<<str[i]<<"***"<<str[j]<<"______"<<i<<"   "<<j<<endl;这段忽略 
		if(i<j) swap(str[i],str[j]);
	}
	qsort(l,j),qsort(j+1,r);
}

int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++) cin>>str[i];
	
	qsort(0,n-1);
	
	for(int i=0;i<n;i++) cout<<str[i];
	
	return 0;
}
2022/2/10 10:37
加载中...