25分依托
查看原帖
25分依托
1075989
BlauAnthony楼主2024/12/13 22:50

死亡回放: https://www.luogu.com.cn/record/list?pid=P1012&user=1075989

代码:

//洛谷p1012.cpp
#include<iostream>
#include<cstring> 
#include<vector>
using namespace std;
int n;
void merge(vector<string> &nums,int start,int end,int w,vector<string> &tmp){
    if(start-end>1){
        merge(nums,start,end/2,w,tmp);
        merge(nums,end/2,end,w,tmp);
        int x=start,y=end/2;
        for(int i=start;i<end;i++){
            if(y>=end||(x<end/2&&(nums[x].size()<w||nums[x][w]>nums[y][w]))){
                tmp[i]=nums[x];
                x++;
            }else{
                tmp[i]=nums[y];
                y++;
            }
        }
        for(int i=start;i<end;i++)nums[i]=tmp[i];
    }else{
        if(nums[start].size()>w&&nums[start][w]<nums[end][w])swap(nums[start],nums[end]);
    }
}
void stringMergeSort(vector<string> &nums,vector<string> &tmp,int maxsize){
    for(int i=0;i<maxsize;i++){
        merge(nums,0,n/2,i,tmp);
        merge(nums,n/2,n,i,tmp);
    }
}
int main(){
    int maxsize=0,s;
	cin>>n;vector<string> nums(n+1,"");
	vector<string> tmp(n,"");
	for(int i=0;i<n;i++){
	    cin>>nums[i];
	    s=nums[i].size();
	    maxsize=max(maxsize,s);
	}
	stringMergeSort(nums,tmp,maxsize);
	for(int i=n;i>=0;cout<<nums[i--]);
	return 0;
}
2024/12/13 22:50
加载中...