想问一下这样子做D题为什么会被卡50%






#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
int x[500],y[500];

long double max(long double a,long double b,long double c){
	long double M;
	
	if(a<b) M = b;
	else M = a;
	
	if(M<c) M = c; 
	return M;
	
} 
void sort_s(long double *a){
	int t;
	if(a[0]<a[1])
	{t=a[0];a[0]=a[1];a[1]=t;}
	if(a[0]<a[3])
	{t=a[0];a[0]=a[2];a[2]=t;}
	if(a[1]<a[2])
	{t=a[1];a[1]=a[2];a[2]=t;}
}

int main(int argc, char *argv[]) {
	int _,tot = 0;
	
	long double len[3],term1,term2,term3;
	scanf("%d",&_);
	
	for(int i = 0;i<_;i++){
		scanf("%d %d",&x[i],&y[i]);
	} 
	
	for(int i = 0;i<_-2;i++){
		for(int j = i+1;j<_-1;j++){
			for(int k = j+1;k<_;k++){
				term1 = 0;
				
				len[0] = (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
				len[1] = (x[k]-x[j])*(x[k]-x[j])+(y[k]-y[j])*(y[k]-y[j]);
				len[2] = (x[i]-x[k])*(x[i]-x[k])+(y[i]-y[k])*(y[i]-y[k]);
				
				sort_s(len);
                
				term1 = len[0]+len[1]-len[2];

				term3 = (double)(x[i]-x[j])/(y[i]-y[j])-(double)(x[k]-x[j])/(y[k]-y[j])+
				(double)(x[k]-x[j])/(y[k]-y[j])-(double)(x[i]-x[k])/(y[i]-y[k])+
				(double)(x[i]-x[j])/(y[i]-y[j])-(double)(x[i]-x[k])/(y[i]-y[k]);
				
				if(term1 < 0 && term3 != 0) tot++;
				
			} 
		} 
	} 
	
	printf("%d",tot);
	
	return 0;
}


如题,term1是用来判断余弦定理的,trem3是用来判断是否共线的(用的是计算斜率是否相等来判断的)
全部评论
在sort_s函数内,你有一处写了a[3],这里应该是a[2]。而且sort_s函数的临时变量应该是long double类型的~ 由于我没有比赛权限没办法提交,其他的可能还需要自己排查下 比如,在y[i] y[j] 或y[k]有两个相等的时候,你的除法式子会出现除0的情况
点赞 回复
分享
发布于 2020-02-10 13:32

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务