求助站外题
查看原帖
求助站外题
222057
joy2010WonderMaker楼主2021/5/24 20:58

本人代码:

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int a[100005],b[100005],c[100005],d[100005],e[100005],num[100005];
int vis1[100005],vis2[100005];
void merge(int l, int r) {
    int p1=l,mid=(l+r)/2,p2=mid+1,p=l;
    while(p1<=mid&&p2<=r){
        if(c[p1]<=c[p2]){
            d[p++]=c[p1++];
        }else{
            d[p++]=c[p2++];
        }
    }
    while(p1<=mid){
        d[p++]=c[p1++];
    }
    while(p2<=r){
        d[p++]=c[p2++];
    }
    for(int i=l;i<=r;i++){
        c[i]=d[i];
    }
}
void merge_sort(int l, int r) {
    if(l==r){
        return;
    }
    int mid=(l+r)/2;
    merge_sort(l,mid);
    merge_sort(mid+1,r);
    merge(l,r);
}
int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d %d",&a[i],&b[i]);
		c[i]=abs(a[i]-b[i]);
		e[i]=c[i];
		num[i]=i;
	}
	merge_sort(0,n-1);
	for(int i=n-1;i>=0;i--){
		for(int j=0;j<n;j++){
			if(e[j]==c[i]){
				if(!vis1[j]&&!vis2[i]){
					num[i]=j;
					vis1[j]=1;
					vis2[i]=1;
				}
			}
		}
	}
	for(int i=n-1;i>=0;i--){
		printf("%d ",num[i]+1);
	}
	return 0;
}

TLE了,只有60分

2021/5/24 20:58
加载中...