竞赛讨论区 > 想问一下这样子做D题为什么会被卡50%
头像
Benition丶
发布于 2020-02-07 23:56
+ 关注

想问一下这样子做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是用来判断是否共线的(用的是计算斜率是否相等来判断的)

全部评论

(1) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐