注册 登录
编程论坛 C语言论坛

请问这里为什么输出的顺序不一样

komorebi0110 发布于 2020-06-15 15:54, 1895 次点击
只有本站会员才能查看附件,请 登录

#include <iostream>
#include <string.h>
#include <string>
#include <stdlib.h>
#include <stdio.h>
#include<cmath>
#include <algorithm>
#include <math.h>
 using namespace std;
struct research{
char name[13];
int x;
int y;
char kind[10];
};
int heng,zong;
int cmp(research a, research b ){
      if(((a.x-heng)*(a.x-heng)+(a.y-zong)*(a.y-zong))!=((b.x-heng)*(b.x-heng)+(b.y-zong)*(b.y-zong)))
        return ((a.x-heng)*(a.x-heng)+(a.y-zong)*(a.y-zong))<((b.x-heng)*(b.x-heng)+(b.y-zong)*(b.y-zong));
        return(strcmp(a.name,b.name));
}
int main()
{
   int n,m;
   cin>>n>>m;
   struct research a[n];
   for(int i=0;i<n;i++)
   {
       cin>>a[i].name>>a[i].x>>a[i].y>>a[i].kind;
   }
   int k;
   int cnt;
   int flag=0;
   for(int i=0;i<m;i++)
   {   cnt=0;
       char want[10];
       cin>>heng>>zong;
       cin>>want;
       cin>>k;
       sort(a,a+n,cmp);
       for(int j=0;j<n&&cnt<k;j++)
       {
           if(strcmp(a[j].kind,want)==0)
           { flag=1;
             cnt++;
             double dis=sqrt(((double)a[j].x-(double)heng)*((double)a[j].x-(double)heng)+((double)a[j].y-(double)zong)*((double)a[j].y-(double)zong));
             cout<<a[j].name<<' ';
             printf("%.3f\n",dis);
           }

       }
       if(!flag) cout<<endl;
   }

}
4 回复
#2
komorebi01102020-06-15 15:56
只有本站会员才能查看附件,请 登录

//一个是数据大的在前面,一个是数据小的在前面,但我感觉cmp写的是一个意思
#3
fulltimelink2020-06-15 17:18
int有溢出 求平方时
#4
komorebi01102020-06-15 17:55
回复 3楼 fulltimelink
请问有解决的办法吗,还是得换一种方法
#5
komorebi01102020-06-15 20:13
已解决,但是对于特别大的数据规模好像就会time limit,据说可以用快排什么的算法,我再想想吧,谢谢大家!
1