#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) 回帖