Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Bismillahir Rahmanir Rahim
- /******Harun Or Rashid******/
- /***********Template Starts Here***********/
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<cctype>
- #include<cstdlib>
- #include<string>
- #include<vector>
- #include<set>
- #include<stack>
- #include<queue>
- #include<map>
- #include<algorithm>
- using namespace std;
- #define MEM(a,b) memset(a,b,sizeof(a))
- #define CLR(a) memset(a,0,sizeof(a))
- #define MAX(a,b) ((a)>(b)?(a):(b))
- #define MIN(a,b) ((a)>(b)?(b):(a))
- #define ABS(a) ((a)>0? (a):(-(a)))
- #define SQ(a) ((a)*(a))
- #define SZ(a) (int)a.size()
- #define FORN(i,n) for(i=1;i<=n;i++)
- #define FORAB(i,a,b) for(i=a;i<=b;i++)
- #define ALL(V) V.begin(),V.end()
- #define pb(a) push_back(a)
- #define pr(a) cout<<a<<endl
- #define pf printf
- #define sf scanf
- #define swap(a,b) (a ^= b, b ^= a, a ^= b)
- #define PI acos(-1)
- #define x first
- #define y second
- #define eps 1e-6
- typedef int D;
- typedef long long int LLD;
- typedef unsigned long long int LLU;
- typedef vector<D> VI;
- typedef set<D> SI;
- typedef vector<D>::iterator Viti;
- /***********Template Ends Here***********/
- double det(int x1,int y1,int c1,int x2,int y2,int c2,int x3,int y3,int c3)
- {
- double res=x1*(y2*c3-c2*y3)-y1*(c3*x2-c2*x3)+c1*(y3*x2-x3*y2);
- return res;
- }
- int main()
- {
- int T,n,i,j,k,l,cnt,prob;
- double area,d1,d2,d3,d4,D;
- vector<pair<int,int> >V;
- cin>>T;
- while(T--)
- {
- cin>>n;
- pair<int,int>point;
- V.clear();
- for(i=0; i<n; i++)
- {
- cin>>point.x>>point.y;
- V.pb(point);
- }
- cnt=prob=0;
- for(i=0; i<n; i++)
- {
- for(j=i+1; j<n; j++)
- {
- for(k=j+1; k<n; k++)
- {
- prob=prob+n-3;
- area=det(V[i].x,V[i].y,1,V[j].x,V[j].y,1,V[k].x,V[k].y,1);
- if(area)
- {
- for(l=0; l<n; l++)
- {
- if(l==i||l==j||l==k) continue;
- d1=area*(V[l].x*V[l].x+V[l].y*V[l].y);
- d2=V[l].x*det(V[i].x*V[i].x+V[i].y*V[i].y,V[i].y,1,V[j].x*V[j].x+V[j].y*V[j].y,V[j].y,1,V[k].x*V[k].x+V[k].y*V[k].y,V[k].y,1);
- d3=V[l].y*det(V[i].x*V[i].x+V[i].y*V[i].y,V[i].x,1,V[j].x*V[j].x+V[j].y*V[j].y,V[j].x,1,V[k].x*V[k].x+V[k].y*V[k].y,V[k].x,1);
- d4=det(V[i].x*V[i].x+V[i].y*V[i].y,V[i].x,V[i].y,V[j].x*V[j].x+V[j].y*V[j].y,V[j].x,V[j].y,V[k].x*V[k].x+V[k].y*V[k].y,V[k].x,V[k].y);
- D=d1-d2+d3-d4;
- if(area<0&&D>=0) cnt++;
- if(area>0&&D<=0) cnt++;
- }
- }
- }
- }
- }
- printf("%.6lf\n",(double)cnt/prob+eps);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement