您的位置:首页 > 其它

hdu 3629 Convex 计算几何

2015-04-09 22:43 357 查看
不会做,很可耻的看了题解,题解还看了那么久。http://blog.sina.com.cn/s/blog_64675f540100ksug.html

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3629

#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <iostream>

#define eps 1e-8
#define pi acos(-1.0)
#define maxn 705

using namespace std;

int T,n;

struct Node {
double x,y;
};

__int64 C(int n,int m){
__int64 ans = 1;
__int64 i,a1=n,a2=m;
for(i=0;i<a2;i++){
ans *= (a1-i);
}
for(i=1;i<=a2;i++){
ans /= i;
}
return ans;
}

Node a[maxn];
double ad[maxn*2];
__int64 re,re2;

void Solve(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lf %lf",&a[i].x,&a[i].y);
}
re = 0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j)continue;
double tmp =atan2(a[j].y-a[i].y,a[j].x-a[i].x);
if(tmp<-eps)tmp += 2 * pi;
ad[j] = j < i ?  tmp : ad[j-1] = tmp;
}
sort(ad,ad+n-1);
int k = 1; re2 = 0;
for(int j=0;j<n-1;j++){ad[j+n-1]=ad[j]+2*pi;}
for(int j=0;j<n-1;j++){
while(fabs(ad[k]-ad[j])-pi<0)k++;
if(k-j-1>=2)re2 +=C(k-j-1,2);
}
re += C(n-1,3) - re2;
}
printf("%I64d\n",C(n,4)-re);
}
}

void File(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}

int main(void){
//File();
Solve();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: