Herding
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 702 Accepted Submission(s): 174
The first line of each test case contains one integer N( 1<=N<=100 ). The following N lines describe the coordinates of the trees. Each of these lines will contain two float numbers Xi and Yi( -1000<=Xi, Yi<=1000 ) representing the coordinates of the corresponding tree. The coordinates of the trees will not coincide with each other.
分析:求最小面积就是求所有点构成的所有三角形的最小面积,但是要注意选择构成三角形的三个点不能在一条线上,横,竖,斜不能在一条线上
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<cmath> #include<iomanip> #define INF 99999999 using namespace std; const int MAX=100+10; double s[MAX][2]; double calculate(int i,int j,int k){ return fabs((s[j][0]-s[i][0])*(s[k][1]-s[i][1])-(s[k][0]-s[i][0])*(s[j][1]-s[i][1]))/2; } int main(){ int t,n; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;++i)scanf("%lf%lf",&s[i][0],&s[i][1]); double sum=INF*1.0; for(int i=0;i<n;++i){ for(int j=i+1;j<n;++j){ for(int k=j+1;k<n;++k){ if(s[i][1] == s[j][1] && s[j][1] == s[k][1])continue; if((s[j][1]-s[i][1])/(s[j][0]-s[i][0]) == (s[k][1]-s[j][1])/(s[k][0]-s[j][0]))continue; sum=min(sum,calculate(i,j,k)); } } } if(sum == INF*1.0)printf("Impossible\n"); else printf("%.2lf\n",sum); } return 0; }
25f6dbf44fc1 11 月前
a6f07b76ae03 11 月前