栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2165 Gunman

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2165 Gunman

#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>#define inf 1e-8using namespace std;int n;struct rectangle//存储矩形{    double x,y;    double m,n,z;}data[105];struct node//存储点与答案{    double x,y,z;}data2[420],ans[105];struct line//存储竖线{    double x,y,m,n,z;}data3[210];bool findl(node a,line b,node& temp)//寻找直线temp 若不存在返回false{    if(a.z==b.z)    return false;    temp.y=b.z*a.y/a.z;    temp.z=b.z;temp.x=b.x;    if(temp.y-b.y>-inf && temp.y-b.n<inf)return true;    return false;}bool solve(node a,node b,rectangle c,node& temp)//解决直线是否与矩形相交 不相交返回false{    if(a.z==c.z)    {temp=a;return true;}    if(b.z==c.z)    {temp=b;return true;}    temp.x=(c.z-b.z)*(b.x-a.x)/(b.z-a.z)+b.x;    temp.y=(c.z-b.z)*(b.y-a.y)/(b.z-a.z)+b.y;    temp.z=c.z;    if(temp.x-c.x>-inf && c.m-temp.x>-inf && temp.y-c.y>-inf && c.n-temp.y>-inf)return true;    return false;}int main(){    int i,j,k,flag;    node temp,a;    //freopen("in.txt","r",stdin);    while((scanf("%d",&n))!=EOF)    {        for(i=0;i<n;i++)        { scanf("%lf%lf%lf%lf%lf",&data[i].x,&data[i].y,&data[i].m,&data[i].n,&data[i].z); data3[i*2].x=data2[i*4].x=data[i].x;data3[i*2].y=data2[i*4].y=data[i].y; data3[i*2].m=data2[i*4+1].x=data[i].x;data3[i*2].n=data2[i*4+1].y=data[i].n; data3[i*2+1].x=data2[i*4+2].x=data[i].m;data3[i*2+1].y=data2[i*4+2].y=data[i].y; data3[i*2+1].m=data2[i*4+3].x=data[i].m;data3[i*2+1].n=data2[i*4+3].y=data[i].n; data3[i*2].z=data3[i*2+1].z=data2[i*4].z=data2[i*4+1].z=data2[i*4+2].z=data2[i*4+3].z=data[i].z;        }        flag=0;        for(i=0;i<n*4;i++)        { for(j=0;j<n*2;j++) {     if(findl(data2[i],data3[j],temp))     {         a=data2[i];         for(k=0;k<n;k++)         {  if(!solve(a,temp,data[k],ans[k]))  break;  if(k==n-1){flag=1;break;}         }     }     if(flag==1)break; } if(flag==1)break;        }        if(flag==1)        { printf("SOLUTIONn"); printf("%.6fn",temp.x-(temp.z*(a.x-temp.x)/(a.z-temp.z))); for(i=0;i<n;i++) {     printf("%.6f %.6f %.6fn",ans[i].x,ans[i].y,ans[i].z);//G++要用%f 不用%lf }        }        else printf("UNSOLVABLEn");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号