HDU 1007代码总是出错 求大神解答 已经对x 和y分别排序了
HDU 1007代码老是出错 求大神解答 已经对x 和y分别排序了
附代码:
#include<stdio.h>
#include<math.h>
#define SIZE 100100
typedef struct cor_x_y{
double cor_x[SIZE];
double cor_y[SIZE];
}cor;
cor xy;
double div_meg(int i,int j){
int mid=(int)(i+j)/2;
double m,mm,b;
if(j-i==1){
return (xy.cor_x[i]-xy.cor_x[j])*(xy.cor_x[i]-xy.cor_x[j])+(xy.cor_y[i]-xy.cor_y[j])*(xy.cor_y[i]-xy.cor_y[j]);
}
if(j<=i){
return -1;
}
m=div_meg(i,mid);
mm=div_meg(mid+1,j);
b=(xy.cor_x[mid]-xy.cor_x[mid+1])*(xy.cor_x[mid]-xy.cor_x[mid+1])+(xy.cor_y[mid]-xy.cor_y[mid+1])*(xy.cor_y[mid]-xy.cor_y[mid+1]);
if(m<0&&mm>=0){
if(mm>b)
return b;
else
return mm;
}
if(m>=0&&mm<0){
if(m>b)
return b;
else
return m;
}
if(m<0&&mm<0){
return b;
}
if(m>=0&&mm>=0){
if(mm>b){
if(b>m){
return m;
}else{
return b;
}
}else{
if(m>mm){
return mm;
}else{
return m;
}
}
}
}
void swap_xy(int i,int j){
double s;
s=xy.cor_x[i];
xy.cor_x[i]=xy.cor_x[j];
xy.cor_x[j]=s;
s=xy.cor_y[i];
xy.cor_y[i]=xy.cor_y[j];
xy.cor_y[j]=s;
}
int split (double *array,int head , int tail,int order)
{
int middle = head + (tail - head) / 2;
while (1)
{
if(order){
while (array[head] < array[middle])
head++;
tail--;
while (array[tail] > array[middle])
tail--;
if (head >= tail)
return head;
swap_xy (head , tail);
head++;
}else{
while (array[head] > array[middle])
head++;
tail--;
while (array[tail] < array[middle])
tail--;
if (head >= tail)
return head;
swap_xy (head , tail);
head++;
附代码:
#include<stdio.h>
#include<math.h>
#define SIZE 100100
typedef struct cor_x_y{
double cor_x[SIZE];
double cor_y[SIZE];
}cor;
cor xy;
double div_meg(int i,int j){
int mid=(int)(i+j)/2;
double m,mm,b;
if(j-i==1){
return (xy.cor_x[i]-xy.cor_x[j])*(xy.cor_x[i]-xy.cor_x[j])+(xy.cor_y[i]-xy.cor_y[j])*(xy.cor_y[i]-xy.cor_y[j]);
}
if(j<=i){
return -1;
}
m=div_meg(i,mid);
mm=div_meg(mid+1,j);
b=(xy.cor_x[mid]-xy.cor_x[mid+1])*(xy.cor_x[mid]-xy.cor_x[mid+1])+(xy.cor_y[mid]-xy.cor_y[mid+1])*(xy.cor_y[mid]-xy.cor_y[mid+1]);
if(m<0&&mm>=0){
if(mm>b)
return b;
else
return mm;
}
if(m>=0&&mm<0){
if(m>b)
return b;
else
return m;
}
if(m<0&&mm<0){
return b;
}
if(m>=0&&mm>=0){
if(mm>b){
if(b>m){
return m;
}else{
return b;
}
}else{
if(m>mm){
return mm;
}else{
return m;
}
}
}
}
void swap_xy(int i,int j){
double s;
s=xy.cor_x[i];
xy.cor_x[i]=xy.cor_x[j];
xy.cor_x[j]=s;
s=xy.cor_y[i];
xy.cor_y[i]=xy.cor_y[j];
xy.cor_y[j]=s;
}
int split (double *array,int head , int tail,int order)
{
int middle = head + (tail - head) / 2;
while (1)
{
if(order){
while (array[head] < array[middle])
head++;
tail--;
while (array[tail] > array[middle])
tail--;
if (head >= tail)
return head;
swap_xy (head , tail);
head++;
}else{
while (array[head] > array[middle])
head++;
tail--;
while (array[tail] < array[middle])
tail--;
if (head >= tail)
return head;
swap_xy (head , tail);
head++;