POJ 1039 Pipe
来源:互联网 发布:config.php下载 编辑:程序博客网 时间:2024/05/01 01:15
题意:一束光线从左端射入钢管,问能到达的最远点的横坐标。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>using namespace std;const double INF = 1e20;const double EPS = 1e-6;struct cvector{ double x,y; cvector(double a,double b) { x=a,y=b; } cvector() {}};cvector operator+(cvector a,cvector b){ return cvector(a.x+b.x,a.y+b.y);}cvector operator-(cvector a,cvector b){ return cvector(a.x-b.x,a.y-b.y);}cvector operator*(double a,cvector b){ return cvector(a*b.x,a*b.y);}double operator*(cvector a,cvector b){ return a.x*b.x+a.y*b.y;}double operator^(cvector a,cvector b){ return a.x*b.y-b.x*a.y;}double length(double t){ return t<0?-1:t;}double length(cvector t){ return sqrt(t*t);}struct cpoint{ double x,y; cpoint(double a,double b) { x=a,y=b; } cpoint() {}};cvector operator-(cpoint a,cpoint b){ return cvector(a.x-b.x,a.y-b.y);}double dist(cpoint a,cpoint b){ return length(a-b);}struct cline{ cpoint a,b;};bool intersect(cline a,cline b){ return ((a.a-b.a)^(b.b-b.a))*((a.b-b.a)^(b.b-b.a))<EPS;}cpoint intersection(cline u, cline v){ cpoint ret=u.a; double t=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))/ ((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x)); ret.x+=(u.b.x-u.a.x)*t; ret.y+=(u.b.y-u.a.y)*t; return ret;}cline re[29];cline edge[29][2];int n;double oper(cline tmp){ if(!intersect(re[0],tmp))return -INF; double ans = -INF; int k; for(k=1; k<n; k++) if(!intersect(re[k],tmp)) { cpoint x; x = intersection(edge[k][0],tmp); ans = max(ans,x.x); x = intersection(edge[k][1],tmp); ans = max(ans,x.x); break; } if(k>=n)return INF; return ans;}int main(){ freopen("in.txt","r",stdin); while(scanf("%d",&n)&&n) { double ans = -INF; for(int i=0; i<n; i++) { scanf("%lf%lf",&re[i].a.x,&re[i].a.y); re[i].b.x=re[i].a.x; re[i].b.y=re[i].a.y-1; if(i) { edge[i][0].a=re[i].a; edge[i][0].b=re[i-1].a; edge[i][1].a=re[i].b; edge[i][1].b=re[i-1].b; } } cline tmp; for(int i=0; i<n&&ans!=INF; i++) { for(int j=i+1; j<n&&ans!=INF; j++) { tmp.a=re[i].a,tmp.b=re[j].a; ans = max(ans,oper(tmp)); tmp.a=re[i].b,tmp.b=re[j].b; ans = max(ans,oper(tmp)); tmp.a=re[i].b,tmp.b=re[j].a; ans = max(ans,oper(tmp)); tmp.a=re[i].a,tmp.b=re[j].b; ans = max(ans,oper(tmp)); } } if(ans==INF) printf("Through all the pipe.\n"); else printf("%.2lf\n",ans); } return 0;}
- POJ 1039 Pipe
- POJ 1039 Pipe
- POJ 1039 Pipe
- POJ 1039 Pipe
- POJ 1039 Pipe
- POJ 1039 Pipe
- POJ 1039 Pipe
- POJ 1039 Pipe
- poj 1039 Pipe
- POJ 1039 pipe
- POJ 1039--Pipe
- poj 1039 Pipe
- Pipe - POJ 1039 几何
- POJ 1039 Pipe
- poj 1039 Pipe
- POJ-1039-Pipe
- POJ 1039 Pipe
- poj 1039 Pipe
- SquishIt——JavaScript、CSS压缩器
- 常用的android弹出对话框
- Goobuntu:谷歌的内部桌面系统
- 自动维护索引--联机重建或组织索引
- libusb-win32编译环境,及快速调试方法
- POJ 1039 Pipe
- Android中Activity去除标题栏和状态栏
- cocos2d安装出现Error: This script must be run as root in order to copy templates to /Library/Application
- ldr adr区别
- 生成流水号
- Qt Creator 在windows下安装出现问题
- poj 3348(凸包模版体)
- ( 监测仪 )最近两个月做的系统.欢迎大家来提问,相互学习.
- Linux内核中等待队列的几种用法