第一个点TLE,C语言小白求助
查看原帖
第一个点TLE,C语言小白求助
867346
Fugeg楼主2022/12/17 15:03
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
	int i,n,j,t=0,zf[1100];
	struct xs{
		char xm[10];
		int yw;
		int sx;
		int yy;
	}s[1100];
	struct jg{
		char mz[10];
		char mz1[10];
	}z[100000],temp;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%s %d %d %d",&s[i].xm,&s[i].yw,&s[i].sx,&s[i].yy);
		zf[i]=s[i].yw+s[i].sx+s[i].yy;
	}
	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++){
			if(abs(s[i].yw-s[j].yw)<=5&&abs(s[i].sx-s[j].sx)<=5&&abs(s[i].yy-s[j].yy)<=5&&abs(zf[j]-zf[i])<=10){
				if(strcmp(s[i].xm,s[j].xm)){
					strcpy(z[t].mz,s[i].xm);
					strcpy(z[t].mz1,s[j].xm);
					t++;
				}
				else{
					strcpy(z[t].mz,s[j].xm);
					strcpy(z[t].mz1,s[i].xm);
					t++;
				}
			}
		}
	}
	for(i=1;i<t;i++){
		for(j=0;j<t-i;j++){
			if(strcmp(z[j].mz,z[j+1].mz)>0){
				temp=z[j];
				z[j]=z[j+1];
				z[j+1]=temp;
			}
			else if(strcmp(z[j].mz,z[j+1].mz)==0&&strcmp(z[j].mz1,z[j+1].mz1)>0){
				temp=z[j];
				z[j]=z[j+1];
				z[j+1]=temp;
			}
		}
	}
	for(i=0;i<t;i++){
		printf("%s %s",z[i].mz,z[i].mz1);
		if(i<t-1)
		printf("\n");
	}	
}

该怎么简化呢

2022/12/17 15:03
加载中...