首页 > 其他分享 >POJ-1066

POJ-1066

时间:2024-09-04 19:15:35浏览次数:4  
标签:return point int double 线段 1066 POJ inline

题解告诉我:
大意:在一个矩形区域内,有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越只能在中点穿越
思路:需要巧妙的转换一下这个问题,因为从一个点到终点不可能“绕过”围墙,只能穿过去,所以门是否开在中点是无所谓的,只要求四周线段中点到终点的线段与墙的最少交点个数即可。
更进一步,实际上,只需判断四周围墙的所有点与终点的连线与内墙的最少交点加一即可。
代码:

#include<bits/stdc++.h>
using namespace std;
struct point {
	double x;
	double y;
} p[65],ed;
int n;
inline point getmag(point a,point b) {
	point s;
	s.x=b.x-a.x;
	s.y=b.y-a.y;
	return s;
}
inline double multiX(point a,point b) {
	return a.x*b.y-b.x*a.y;
}
inline int intersect(point a,point b) {
	int ans=0;
	if(a.x==b.x&&a.y==b.y)return 0;
	for(int i=1; i<=n; i++) {
		double d1=multiX(getmag(a,p[i]),getmag(a,b))*multiX(getmag(a,p[i+n]),getmag(a,b));
		double d2=multiX(getmag(p[i],a),getmag(p[i],p[i+n]))*multiX(getmag(p[i],b),getmag(p[i],p[i+n]));
		if(d1<=0&&d2<=0)ans++;
	}
	return ans;
}
int main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++) scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&p[i+n].x,&p[i+n].y);
	scanf("%lf%lf",&ed.x,&ed.y);
	if(n==0) {
		printf("Number of doors = 1\n");
		return 0;
	}
	int ans=2147483647;
	for(int i=1; i<=2*n; i++)ans=min(ans,intersect(p[i],ed));
	printf("Number of doors = %d\n",ans);
	return 0;
}

标签:return,point,int,double,线段,1066,POJ,inline
From: https://www.cnblogs.com/zan-mei-tai-yang/p/18397203

相关文章

  • POJ - 3318
    他说:O(n^3)是过不了滴一搜……6代码和题解没有实质区别:#include<cstdio>#include<ctime>#include<cstdlib>usingnamespacestd;inta[505][505],b[505][505],c[505][505];intmain(){ srand(time(NULL)); intn; ios::sync_with_stdio(0); cin.tie(0); while(cin......
  • POJ - 1765
    第一次做扫描线挺好的#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;structppx{ intl,r; doubleleft,right; doublelen; intcover;//记录重边情况}tree[4*200+10];doubley[200+10];//对应的序号装对应的边structpp{ doublex......
  • POJ - 1870
    先把蜂巢快递柜画出来:__________/\__/\__/\__/\____/\__/\__/53\__/\__/\__/\__/\__/52\__/54\__/\__/\\__/\__/51\__/31\__/55\__/\__//\__/50\__/30\__/32\__/56\__/\\__/49\__/29\__......
  • POJ - 3318
    他说:O(n^3)是过不了滴一搜……6代码和题解没有实质区别:#include<cstdio>#include<ctime>#include<cstdlib>usingnamespacestd;inta[505][505],b[505][505],c[505][505];intmain(){ srand(time(NULL)); intn; ios::sync_with_stdio(0); cin.tie(0); while(cin......
  • POJ - 2976
    原来是二分谁对平均分贡献大选谁界限<0.001,100次足矣#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>usingnamespacestd;constintmaxn=1010;intn,k;doublemid;structNode{ doublea,b;}w[maxn];boolcmp(Nodex,Nodey......
  • POJ - 3071
    概率题。本蒟蒻不会概率dp,于是手搓枚举。反正爆枚够用后记:SadBee的想法考虑维护每队对上上一队/下一队的胜率。只有两队最简单,用1乘即可那多队呢?不如看成两队。见:P(1胜)=P(1战胜2)P(3战胜4)P(1战胜3)+P(1战胜2)P(4战胜3)P(1战胜4)P(2胜)=......
  • springboot原创歌曲分享平台(11066)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • POJ1321-棋盘问题
    POJ从23号崩了,放弃POJ(也不知是不是有比赛把oj都关了),各大OJLeetcode/PAT各种花里胡哨开会员能数据,它不配正经刷题牛客网招聘多课程广告多我焦虑不想入hdoj和洛谷不错,找了找搜索算法的题目单,之前看过数一巨巨写的知乎:邝斌带你飞专题,无限回忆西安艾教培训,卿俊888上交知乎咨询,科技......
  • TopoJSON格式详解,写入读取TopoJSON示例
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......
  • P10660 BZOJ2759 一个动态树好题 题解
    从题目名字看出此题需要用动态树解决对于任意\(i\),都有唯一的\(p_i\)与之对应,由\(p_i\)向\(i\)连边,\(n\)种关系显然构成一基环树森林。对于环上的节点,一个点可以自己表示自己,所以可以直接解出该点的权值,其他点从环上的点直接推出即可。考虑如何动态维护这个过程,一个点上......