POJ2398 计算几何外积+二分

线段树入门学习(三)懒操作(兼解POJ1823) JAVA NULL 博文链接:https://128kj.iteye.com/blog/1739733 立即下载

题意:给n个线段m个玩具和x1,y1,x2,y2 每条线段起点纵坐标y1 ,终点纵坐标y2  

玩具箱的边界由n条线段+(x1,y1)-(x1,y2),(x2,y1)-(x2,y2)共n+2条线段形成 n+1个区域

保证n个线段都在x1,y1,x2,y2内,不会有玩具在边上或超出边界

输出有多少个区域的玩具数目有K个 K>0 的任意数


思路:假设玩具是点P 红色是区域的号码,蓝色是线段的号码

要判断P在哪个区域里,先编好号码,不然二分会乱


对每个玩具进行l=0,r=n 共n+1个区域 二分找使得外积<0的号码最小的线段即可


对了,这题N条线段得先排序再二分


#include
#include
#include
#include
#include
#include
#include
#include
#define MOD  1e9+7
#define MaxN 100000
#define ll long long
#define INF  0x3f3f3f3f//1e9大一点 
#define scann(d) scanf("%d",&d)
#define scanl(d) scanf("%I64d",&d)
using namespace  std;
const double eps = 1e-8;
const double PI = acos(-1.0);
const double e  = 2.718281828459;

inline  int sgn(double a);
inline  ll gcd(ll a,ll b);
inline  ll mod_pow(ll x,ll n,ll mod); 			//快速幂 余数
inline  int b_s1(int *a,int l,int r,int k); 		//二分查找 [l,r)找k 找到返回下标

class point
{
	public:
		int x,y;
		point()
		{
		}
		point(int a,int b)
		{
			x=a,y=b;
		}
		point operator -(const point &b)const
		{
			return point(x - b.x,y - b.y);

		}
		//叉积
		int operator ^(const point &b)const
		{
			return x*b.y - y*b.x;
		}
		//点积
		int operator *(const point &b)const
		{
			return x*b.x + y*b.y;     //绕原点旋转角度B(弧度值),后x,y的变化
		}
} points[1005];
struct line
{
	point s,e;
	line() {}
	line(point _s,point _e)
	{
		s = _s;
		e = _e;
	}
} lines[1005];

ll xmult(point p0,point p1,point p2) //计算p0p1 X p0p2  
{
	return (p1-p0)^(p2-p0);
}
bool C(int mid)
{
//	if()return true;

	return false;
}
bool cmp(line a,line b)
{
	if(a.s.x!=b.s.x)return a.s.x<b.s.x;
	else
		return a.e.x>n)
	{
		if(n==0)
			break;
		int m,x1,y1,x2,y2;
		cin>>m>>x1>>y1>>x2>>y2;
		for(int i=0; i>t1>>t2;
			lines[i].s=point(t1,y1);
			lines[i].e=point(t2,y2);
		}
		sort(lines,lines+n,cmp);
		lines[n].s=point(x2,y1);
		lines[n].e=point(x2,y2);
		lines[n+1].s=point(x1,y1);
		lines[n+1].e=point(x1,y2);
		mapm1;
		m1.clear();
		while(m--)
		{
			int pt1,pt2;
			cin>>pt1>>pt2;
			point t=point(pt1,pt2);
			//二分死大头 
			int l=0;//左
			int r=n;//右
			int mid=0;//中间
			int count=0;//二分次数;
			int ans=0;//答案的下标
			while(l<=r)
			{
				count++;
				mid=(l+r)/2;
				//	cout<<count<<" l:"<<l<<" r:"<<r<<" mid:"<<mid<<endl;
				if(xmult(t,lines[mid].s,lines[mid].e)<0)//bool C(mid);
				{
					ans=mid;//二分找满足if条件的最小mid
					r=mid-1;
				}
				else
				{
					//ans1=mid;//二分找满足else条件的最大mid
					l=mid+1;
				}
			}
			m1[ans]++;
		}
		cout<<"Box"<<endl;
		mapm2;
		for(map::iterator poi=m1.begin(); poi!=m1.end(); poi++)
		{
			m2[poi->second]++;
		}
		for(map::iterator poi=m2.begin(); poi!=m2.end(); poi++)
		{
			cout<first<<": "<second<<endl;
		}
	}
	return 0;
}


















inline int sgn(double a)
{
	return a < -eps ? -1 : a < eps ? 0 : 1;
}

inline ll gcd(ll a,ll b)
{
	return a==0?b:gcd(b%a,a);
}

ll mod_pow(ll x,ll n,ll mod)//快速幂 余数
{
	ll res=1;
	while(n>0)
	{
		if(n&1)//n的二进制最右位是1,即奇数
			res=res*x%mod;
		x=x*x%mod;
		n=n>>1;		 //相当于n/=2;
	}
	return res;
}
int b_s1(int *a,int l,int r,int k)//   二分查找 [l,r)找k 找到返回下标 log(n);
{
	int m;
	while(l<r)
	{
		m=l+(r-l)/2;
		if(a[m]==k)
			return m;
		else if(a[m]<k)
			l=m+1;
		else
			r=m;
	}
	return -1;
}ssssss



DDR内存设计必看:DFI接口协议详解与实战避坑指南(附时序图解析) 本文深入解析了DDR内存设计中连接内存控制器与物理层的DFI接口协议,聚焦于DDR4/DDR5设计的实际痛点。文章详细阐述了协议版本兼容性、时钟架构(匹配频率与频率比系统)、PCB信号完整性设计以及上电初始化与调试等关键环节,为硬件工程师提供了一套从理论到实战的完整避坑指南,并附有时序图解析以助理解。 阅读详情

相关推荐

C++和蓝图1:Unreal Engine 中 C++ 与蓝图的桥梁

摘要: 本文介绍了Unreal Engine(UE)中C++与蓝图可视化脚本的结合机制,重点解析了宏系统(UCLASS、UPROPERTY、UFUNCTION)如何实现代码与蓝图的交互。相比Unity的纯C#脚本模式,UE的双轨制开发允许程序员用C++处理核心逻辑,同时通过蓝图让非程序员快速迭代。文章对比了两大引擎的编程范式差异,指出UE的反射系统和宏标记提供了更精细的控制,并给出了从Unity迁移到UE的具体思路。核心在于理解UE的混合编程优势:C++保证性能,蓝图提升开发效率,二者通过宏系统无缝协作。

qq_46348216的博客 1407

POJ 2398(计算几何 叉积)

题目链接 题目大意:给你一个被n块挡板分隔成n+1个区域的盒子,给你m个点,从小到大输出含有点的个数的区域有多少个 分析:这题其实和POJ 2318差不多的只是输出不一样,还有每个隔板的读入顺序不一定是从左到右的,所以读入完以后用sort排个序, 这道题其实就是考对叉积的应用,计算矢量叉积是与直线和线段相关的算法的核心部分。 设矢量P = ( x1, y1 ),Q = ( x2, y2 )...

不期而遇 848

提供一个微信投票刷票的js代码

最近几天,有个朋友找我去写一个脚本帮他 在微信上刷票、微信投票刷票,我大概看了一下,本次微信投票刷票其实就是根据微信的openid来限制,每个openid只能投三次票的限制。上图可以看出,其实只要openid,和toopenid即可,openid是自己的微信id,toopenid是投票对象的微信id,那我们定时修改openid即可给某一个人刷投票。把这段代码复制到浏览器F12之后的console里,直接回车即可开始微信投票刷票(刷新或关闭浏览器即可停止刷票)//生成随机的ip地址。

qq_858865388专业提供快速微信投票教程攻略和方法的博客 2万+

POJ 2398 Toy Storage (叉积+二分)

题意:有一个长方形盒子,有n个板隔开,分成n+1个区域,又给了m个玩具的坐标,问你 i(0<i≤m)i(0<i≤m)i(0<i≤m)个玩具的区域有多少个。 题解:叉积+二分 跟这题思路一样,不过隔板的输入顺序是打乱的,要排一下序,输出格式也不同。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring

gongyuandaye的博客 325

车载导航测试,面试常见问题

车载导航测试是汽车软件测试的重要组成部分,涉及验证导航系统的功能、性能、可靠性和用户体验。在面试中,面试官通常会考察候选人的测试思维、问题解决能力和实际经验。以下我将从常见问题类别入手,逐步介绍面试中的高频问题,并提供结构化分析。通过以上结构化准备,你能在面试中自信应对车载导航测试相关问题。用户体验测试关注界面友好性和交互流畅性,安全测试则涉及功能安全和数据隐私。功能测试聚焦于导航核心功能的正确性,如路线规划、位置定位和地图显示。面试官会考察你如何识别、报告和跟踪缺陷,以及熟悉测试工具。

m0_69889939的博客 527

附录B:Standard Delay Format(SDF)(上)

本附录将介绍标准延迟标注格式,并说明了如何在仿真中执行反标。 延迟格式描述了设计网表的单元延迟和互连走线延迟,无论设计是用两种主要硬件描述语言(VHDL或Verilog HDL)中的哪一种所描述的。 本章还会介绍仿真的反标(backannotation),STA的反标其实是一个简单直接的过程,其中DUA中的时序弧将由SDF所指定的延迟进行标注。

To the beyond and infinity! 5411

poj2398

/***************************************************************\ *Author:Hu Wenbiao *Created Time: Tue 27 Jul 2010 07:10:34 PM CST *File Name: main.cpp *Description:几何题目。对poj2318的扩展 \***...

weixin_30408165的博客 251

YOLOv8剪枝实战:基于torch_pruning的模型优化与性能提升指南

本文详细介绍了如何使用torch_pruning工具对YOLOv8模型进行结构化剪枝,以实现模型轻量化与性能提升。通过实战步骤解析,包括环境搭建、依赖图分析、迭代剪枝与微调策略,帮助开发者有效减少模型参数量和计算量,提升在边缘设备上的推理速度,同时保持检测(detect)与分割(segment)任务的精度。

water的专栏 1122

POJ2398 判断点在线左边

跟POJ2318差不多,不过这次要对线进行排序,对线的排序有涉及到对点的排序 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;cmath&gt; #include&lt;algorithm&gt; #define maxl 100010 #define eps 1e-8 using namespace std; int ...

binarycopycode 244

vue2 - elementUI表格table树形结构复选框勾选父子联动示例,el-table树状表格tree复选框checkbox多选框全选/反选取消children(当子级全选中,父级自动勾选)

vue2,elementui,el-table树状表格多选,树形结构结合多选框使用,实现单选父子联动全选反选,勾选联动父级勾选,表格多选check父子联动,table表格children如何嵌入复选框,el-table使用多选框与树形数据写一个有半选全选功能的表格,el-table树形表格实现复选框多选效果,表格树状结构多选,每一个row都可以选中并且联动全选按钮,table选父带子选子带父,树形数据与懒加载,Table表格树形结构多选框选中父级时会选中子级,elementUI表格里树形结构嵌套复选框全选全

✅ 精选推荐文章 1万+

深度学习框架对比:AI开发如何选择

你是否遇到过这样的困惑:想做一个图像分类模型,朋友推荐PyTorch;公司要部署智能客服,同事说用TensorFlow;想快速验证想法,学长又提到Keras……深度学习框架种类繁多,功能重叠却各有侧重。本文将覆盖主流框架(PyTorch/TensorFlow/Keras/JAX/MXNet等),从开发者真实需求出发,总结选择框架的核心维度。本文将按照“认识框架→对比特性→实战选择”的逻辑展开:先通过生活比喻理解各框架特点,再用代码对比核心功能,最后结合真实场景给出选择建议。动态计算图。

AI 领航者的博客 1162

计算几何之叉积(外积)得应用

这几天学了一下计算几何,很多内容以前都接触过,但是这么多得定理和意义却从来没想到过,也是吃惊得学习了一场叉积(外积)是一个具有大小和方向得量,方向和点a,b所在得平面垂直,满足右手螺旋定则a * b得叉积是double cross(Point p0,Point p1,Point p2) { Point a,b; a = p1 - p0; b = p2 - p0; ...

Df_cjc的博客 538

音乐生成 - 使用LSTM或Transformer模型进行音乐生成,如MIDI音乐生成。

在本篇博客中,我们将介绍如何使用LSTM和Transformer模型生成MIDI音乐。我们将首先概述音乐生成的一般流程,然后深入了解LSTM和Transformer模型的特点和实现。最后,我们将通过Python代码演示如何使用这两种模型生成MIDI音乐。

斌擎科技 1720

计算几何:点积(Dot product)与叉积

计算几何:点积(Dot product)与叉积

青少年趣味编程 727

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算区域中有t 个点的 区域有多少个+计算几何 + 叉乘+sort+ 二分 + map poj 2398 Toy Storage

题目来源:http://poj.org/problem?id=2398 分析: 计算区域中有t 个点的 区域有多少个。 #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; cons

zn505119020的专栏 457

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ2398——Coneology(计算几何,扫描线)

Coneology Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3771   Accepted: 739 Description A student named Round Square loved to play with cones. He would

say_c_box的博客 473

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

POJ2398(计算几何)

POJ2318的升级版,就是增加了边界的排序。 #include #include #include #include #include using namespace std; #define maxn 5111 #define x1 x_1 #define x2 x_2 #define y1 y_1 #define y2 y_2 #define find Find struct

morejarphone~ 498

POJ2318&&POJ2398

主要利用叉积的一点性质;对于每个点暴力遍历所有的边即可; #include &amp;lt;cstdio&amp;gt; #include &amp;lt;cmath&amp;gt; #include &amp;lt;algorithm&amp;gt; #include &amp;lt;vector&amp;gt; #include&amp;lt;iostream&amp;gt; using namespace std

HumveeA6的博客 317

poj 2398 Toy Storage

Toy Storage Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u [Submit]   [Go

codeStone 899

poj 2398 计算几何

1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <algorithm> 5 using namespace std; 6 7 struct point{ 8 int x,y; 9 }; 10 ...

a18865477815的博客 146

POJ 2398 Toy Storage(二分+简单计算几何)

Toy Storage Time Limit: 1000MS Memory Limit: 65536K Description Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza ...

苟为蒟蒻又何妨 300

poj 2398

题目概述有一长方形,左上顶点坐标(x1,y1),右下顶点坐标(x2,y2),被N条上端点为(up,y1),下端点为(low,y2)的线段分成N+1部分,向长方形中扔M个质点,每个点坐标(x,y),求含有不同质点数的分块各有几个时限2000ms/6000ms输入每组数据第一行6个整数N,M,x1,y1,x2,y2,其后N行,每行2个整数up,low,再其后M行,每行2个整数x,y,输入到N=0结束限制

[CHN]liurui 499

POJ 2398

题解: 2318+排序  #include #include #include using namespace std; const int N = 1000 + 10; int ans[N], mp[N]; int n, m, x1, y1, x2, y2, up, down, x, y; struct line{ int u, l; bool opera

退役ACMer 496

poj 2398 (计算几何)

#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; struct Point { long long int x, y; }; struct

qq_31457873的博客 444
上一篇: Codeforces Round #436 div 2 A B C D 题解
下一篇: POJ3304 计算几何--判断直线与线段相交
animalcoder
博客等级 码龄9年 43粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值