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



基于SOEM的伺服电机控制实战:从配置到调试 本文详细介绍了基于SOEM的伺服电机控制实战,从硬件配置到软件调试的全过程。通过分享PDO映射、状态机控制、性能优化等核心技巧,帮助开发者快速掌握EtherCAT通信与伺服电机控制的关键技术,提升工控系统开发效率。 阅读详情

相关推荐

PCB工程师必看:别再搞错1078玻纤布的Dk了,手把手教你算等效介电常数

本文为PCB工程师提供了1078玻纤布等效介电常数(Dk)的详细计算指南,帮助解决高速设计中的信号完整性问题。通过解析玻纤布结构、混合介质理论和实战计算方法,指导工程师准确设置EDA工具参数,避免常见的Dk计算误区,提升设计精度和仿真准确性。

weixin_42546392的博客 399

POJ 2398(计算几何 叉积)

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

不期而遇 848

告别迷茫!手把手教你用Synopsys VC USB VIP搭建验证平台(附UVM分层序列实战解析)

本文详细介绍了如何使用Synopsys VC USB VIP搭建验证平台,并深入解析UVM分层序列的实战应用。通过Step-by-Step的操作指南和关键配置示例,帮助验证工程师高效集成USB VIP,掌握从环境搭建到测试用例开发的全套技能,特别适合处理复杂协议验证的挑战。

weixin_42520573的博客 553

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

告别轮询!用STM32CubeMX给STM32F030配置ADC多通道+DMA,实测代码分享

本文详细介绍了如何使用STM32CubeMX为STM32F030配置ADC多通道采集与DMA传输,显著提升采集效率。通过实测对比轮询与DMA模式的性能差异,提供完整的代码实现和优化技巧,帮助开发者快速掌握这一高效采集方案。

weixin_42570296的博客 410

如何在高版本的ubuntu系统里安装gcc4.1.2

1、下载安装包,一共五个http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-4.1/,根据计算机系统位数   进行下载,64位下载amd64结尾的。开头分别是cpp-4.1_4.1.2、g++-4.1_4.1.2、gcc-4.1-base_4.1.2、gcc-     4.1_4.1.2、libstdc++6-4.1 2、使用sudo d

lsr_fighting的博客 1931

poj2398

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

weixin_30408165的博客 251

JAVA:Spring Boot3 集成 ShardingSphere 实现数据分库分表

本文介绍了基于Spring Boot和ShardingSphere-JDBC实现分库分表与读写分离的解决方案。针对高并发、大数据量场景下单库单表的性能瓶颈,通过配置ShardingSphere-JDBC实现:1)订单表按user_id和order_id分片到两个库和两张表;2)读写分离,写操作路由至主库,读操作在从库间负载均衡。方案使用Druid连接池优化,支持业务透明,无需修改SQL。

木头 660

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

使用自己的数据跑通mmsegmentation

使用自己的数据跑通mmsegmentation,解决以下报错:1)type object 'FileClient' has no attribute 'infer_client' 2)It is expected output_size equals to 2, but got size 3 3)训练测试结果报NAN 4)KeyError: 'MyDataset is not in the dataset registry' 5)预训练模型和加载的网络结构层名有差异,unexpected key .....

猫猫与橙子的博客 1656

8、对比 LightGBM、XGBoost 和深度学习

本文对比了LightGBM、XGBoost和深度学习模型(特别是TabTransformer)在处理表格数据时的性能差异。从模型复杂度、数据准备、训练时间、准确性和适用场景等方面进行分析,重点探讨了三者在人口普查收入预测任务中的表现。文章详细介绍了XGBoost与LightGBM的核心特性与区别,深入讲解了TabTransformer的架构与实现,并涵盖了分类特征编码、缺失值处理和类别不平衡等关键数据预处理技术,为选择合适的表格数据建模方法提供了实践指导。

julia4scientist的博客 120

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

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

Df_cjc的博客 538

2023年高教社杯 | 2023年高教社杯全国大学生数学建模思路(A题思路、C题思路)

2023年高教社杯 | 2023年高教社杯全国大学生数学建模思路(A题思路、C题思路)

前程算法屋的博客 624

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

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

青少年趣味编程 727

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

计算区域中有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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

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

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、付费专栏及课程。

余额充值