Accept: 44Submit: 74
Time Limit: 1000 mSecMemory Limit : 32768 KB
Problem Description
给定平面上的N 个点 的坐标,现在你的任务是统计任意3个点构成的三角形的面积和的值。
Input
有多组数据
数据的第一行包含一个正整数T 表示数据组数( 1 <= T <= 100) 接下来T 组数据
对于每组数据
第一行 包含 一个正整数 N 代表平面上点的个数 。 (1<= N <= 50,)
接下来N 行每行包含 2个 实数 Xi, Yi 代表第i个点的坐标 (0.00 <= Xi,Yi <= 100.00小数点后至多2位)
数据不保证不会出现坐标相同的点
Output
对于每组数据,首先输出”Case d: “,d为数据编号(从1开始).只输出一个实数,表示面积和的值。(输出小数点后 1位)
Sample Input
1
3
0 0
11
1 0
Sample Output
Case 1: 0.5
Hint
请使用double 代替float 以 避免精度问题.
没想到什么好的办法, 暴力的来,
#include<iostream> #include<cmath> using namespace std; struct Point { double x,y; }; int main() { int t,n,i,j,k,m,t1; Point p[51]; double s,tmp; while(scanf("%d",&t1)!=EOF) { for(i=1;i<=t1;i++) { scanf("%d",&n); m=0; s=0; for(j=0;j<n;j++) { scanf("%lf%lf",&p[m].x,&p[m].y); for(k=0;k<m;k++) { if(p[m].x==p[k].x&&p[m].y==p[k].y) m--; } m++; } for(j=0;j<m-2;j++) { for(k=j+1;k<m-1;k++) { for(t=k+1;t<m;t++) { tmp=(p[j].x*p[k].y-p[k].x*p[j].y + p[k].x*p[t].y-p[t].x*p[k].y + p[t].x*p[j].y-p[j].x*p[t].y)/2; s+=fabs(tmp); } } } printf("Case %d: %.1lf/n",i,s); } } return 0; }