标签:
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 1724 Accepted Submission(s): 508
Special Judge
3 3 1 2 2 1 5 1 1 4 3 1 3 2 2 5 1 1 4 3 1 4 2 3 5 1 1 4
Case #1: 101.3099324740 Case #2: 90.0000000000 Case #3: 78.6900675260
#include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #include<iostream> #include<algorithm> #include<bitset> #include<climits> #include<list> #include<iomanip> #include<stack> #include<set> using namespace std; struct point { double x,y; point(){} point(double x,double y) { this->x=x; this->y=y; } int id; bool operator <(point one)const { return x<one.x; } point operator -(point one) { return point(x-one.x,y-one.y); } double operator *(point one) { return x*one.y-y*one.x; } }box[int(2e5)+10]; vector<int>sk; int l[int(2e5)+10],r[int(2e5)+10]; double ans[int(2e5)+10]; const double pi=acos(-1.0); int main() { int T; scanf("%d",&T); for(int cs=1;cs<=T;cs++) { int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%lf%lf",&box[i].x,&box[i].y); box[i].id=-1; } int m; scanf("%d",&m); m+=n; for(int i=n;i<m;i++) { scanf("%lf",&box[i].x); box[i].y=0; box[i].id=i-n; } sort(box,box+m); sk.clear(); sk.push_back(0); for(int i=1;i<m;i++) { while(sk.size()>=2) { if(!((box[sk.back()]-box[i])*(box[sk[sk.size()-2]]-box[i])<0)) break; sk.pop_back(); } l[i]=sk.back(); sk.push_back(i); } sk.clear(); sk.push_back(m-1); for(int i=m-2;i>-1;i--) { while(sk.size()>=2) { if(!((box[sk.back()]-box[i])*(box[sk[sk.size()-2]]-box[i])>0)) break; sk.pop_back(); } r[i]=sk.back(); sk.push_back(i); } for(int i=0;i<m;i++) { if(box[i].id>-1) { point t=box[l[i]]-box[i]; ans[box[i].id]=atan2(t.y,t.x); t=box[r[i]]-box[i]; ans[box[i].id]-=atan2(t.y,t.x); ans[box[i].id]/=pi/180.0; } } printf("Case #%d:\n",cs); m-=n; for(int i=0;i<m;i++) printf("%.6f\n",ans[i]); } }
标签:
原文地址:http://blog.csdn.net/stl112514/article/details/43979641