/*
hdu 3532
题目大体意思是
给你一堆点
以每个点为顶点与其余点相连形成多个角
找到这多个角的最小的角
以最小角形成一个集合
然后再在这个最小角集合中找到最大的角
极角排序
先枚举每个点
再求出这个点与其他每个点的斜率
再将斜率排序最小角一定在相邻的斜率里产生
之后找到最小角
再找出最小角里的最大角就行了
*/
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <string.h>
#define mod p
#define MAX 3
#define ll long long
#define PI acos(-1)
using namespace std;
struct point
{
double x,y;
};
double myatan(double y,double x)
{
double t=atan2(y,x);
if(t>=0)
return t;
return 2*PI+t;
}
int main()
{
int n;
while(cin>>n)
{
if(n<=0)
break;
point p[1005];
double angle[1005];
memset(p,0,sizeof(p));
memset(angle,0,sizeof(angle));
for(int i=0;i<n;i++)
cin>>p[i].x>>p[i].y;
double max=-500;
for(int i=0;i<n;i++)
{
int num=0;
for(int j=0;j<n;j++)
{
if(i!=j)
{
angle[num]=myatan(p[i].y-p[j].y,p[i].x-p[j].x);
num++;
}
}
sort(angle,angle+num);
double min=100000;
for(int j=1;j<num;j++)
{
double a;
a=angle[j]-angle[j-1];
if(a>=PI)
a=2*PI-a;
if(min>a)
min=a;
}
if(min>max)
max=min;
}
printf("%.4lf\n",fabs(max/PI*180));
}
return 0;
}
hdu 3532
题目大体意思是
给你一堆点
以每个点为顶点与其余点相连形成多个角
找到这多个角的最小的角
以最小角形成一个集合
然后再在这个最小角集合中找到最大的角
极角排序
先枚举每个点
再求出这个点与其他每个点的斜率
再将斜率排序最小角一定在相邻的斜率里产生
之后找到最小角
再找出最小角里的最大角就行了
*/
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <string.h>
#define mod p
#define MAX 3
#define ll long long
#define PI acos(-1)
using namespace std;
struct point
{
double x,y;
};
double myatan(double y,double x)
{
double t=atan2(y,x);
if(t>=0)
return t;
return 2*PI+t;
}
int main()
{
int n;
while(cin>>n)
{
if(n<=0)
break;
point p[1005];
double angle[1005];
memset(p,0,sizeof(p));
memset(angle,0,sizeof(angle));
for(int i=0;i<n;i++)
cin>>p[i].x>>p[i].y;
double max=-500;
for(int i=0;i<n;i++)
{
int num=0;
for(int j=0;j<n;j++)
{
if(i!=j)
{
angle[num]=myatan(p[i].y-p[j].y,p[i].x-p[j].x);
num++;
}
}
sort(angle,angle+num);
double min=100000;
for(int j=1;j<num;j++)
{
double a;
a=angle[j]-angle[j-1];
if(a>=PI)
a=2*PI-a;
if(min>a)
min=a;
}
if(min>max)
max=min;
}
printf("%.4lf\n",fabs(max/PI*180));
}
return 0;
}