poj2074 라인이 교차하는 시선 문제
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<stdlib.h>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;
#define rd(x) scanf("%d",&x)
#define rdd(x,y) scanf("%d%d",&x,&y)
#define rddd(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define rdddd(x,y,z,w) scanf("%d%d%d%d",&x,&y,&z,&w)
#define rds(s) scanf("%s",s)
#define rep(i,n) for(int i=0;i<n;i++)
#define LL long long
const int N = 1000;
const int M=2000;
const int inf=0x3f3f3f3f;
const double eps=1e-8;
int MOD=1e9+7;
int cas=1;
int n,m,k,q;
struct Point{
double x,y;
Point(){}
Point(double _x,double _y){
x=_x;
y=_y;
}
void print(){
printf("x: %lf y: %lf
",x,y);
}
};
struct Seg{
Point s,e;
Seg(){}
Seg(Point _s,Point _e){
s=_s;e=_e;
}
Seg(double a,double b,double c,double d){
s.x=a;s.y=b;
e.x=c;e.y=d;
}
};
int sgn(double x) {return x<-eps?-1:x<eps?0:1;}
double cross(Point a,Point b,Point c){
return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}
Point inter(Seg a,Seg b){
Point p1,p2,p3,p4;
p1=a.s;p2=a.e;p3=b.s;p4=b.e;
double a1=p1.y-p2.y;
double b1=p2.x-p1.x;
double c1=p1.x*p2.y-p2.x*p1.y;
double a2=p3.y-p4.y;
double b2=p4.x-p3.x;
double c2=p3.x*p4.y-p4.x*p3.y;
double x=(c2*b1-c1*b2)/(a1*b2-a2*b1);
double y=(c2*a1-c1*a2)/(a2*b1-a1*b2);
return Point(x,y);
}
Seg house,pro;
Seg seg;
double h1,h2;
double l,r;
struct node{
double pos;
int val;
bool operator < (const node& o) const {
return pos<o.pos;
}
}c[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("aaa","r",stdin);
#endif
int T;
double u,v,w;
while(1){
scanf("%lf%lf%lf",&u,&v,&w);
if(u==0 && v==0 && w==0) break;
house=Seg(u,w,v,w);
h2=w;
scanf("%lf%lf%lf",&u,&v,&w);
pro=Seg(u,w,v,w);
h1=w;
l=u;r=v;
rd(n);
int cnt=0;
for(int i=1;i<=n;i++){
scanf("%lf%lf%lf",&u,&v,&w);
if(w>h1 && w<h2){
Point ret=inter(Seg(house.e,Point(u,w)),pro);
double x1=ret.x;
ret=inter(Seg(house.s,Point(v,w)),pro);
double x2=ret.x;
x2=min(x2,r);
x1=max(x1,l);
if(x1<=x2){
c[++cnt]=node{x1,-1};
c[++cnt]=node{x2,1};
}
}
}
sort(c+1,c+1+cnt);
double ret=0;
double pre=l;
int num=0;
for(int i=1;i<=cnt;i++){
double p=c[i].pos;
if(num>=0) ret=max(ret,p-pre);
num+=c[i].val;
pre=c[i].pos;
}
ret=max(ret,r-c[cnt].pos);
if(sgn(ret)==0) puts("No View");
else printf("%.2f
",ret);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.