[Daimayuan] 碰撞2(C++,模拟)

这篇具有很好参考价值的文章主要介绍了[Daimayuan] 碰撞2(C++,模拟)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

x O y xOy xOy 坐标系中有 N N N 个人,第 i i i 个人的位置是 ( X i , Y i ) (X_i,Y_i) (Xi,Yi),并且每个人的位置都不同。

我们有一个由 LR 组成的长为 N N N 的字符串 S S S S i = S_i= Si= R 代表第 i i i 个人面向右, S i = S_i= Si= L 代表第 i i i 个人面向左。

现在所有人开始朝着他们各自面向的方向走,即面向右 x x x 就增,面向左 x x x 就减。

例如,当 ( X 1 , Y 1 ) = ( 2 , 3 ) (X_1,Y_1)=(2,3) (X1,Y1)=(2,3), ( X 2 , Y 2 ) = ( 1 , 1 ) (X_2,Y_2)=(1,1) (X2,Y2)=(1,1), ( X 3 , Y 3 ) = ( 4 , 1 ) (X_3,Y_3)=(4,1) (X3,Y3)=(4,1), S = S= S= RRL 时,人们的移动如图。

[Daimayuan] 碰撞2(C++,模拟)

我们把两个人对向行走到一个位置称为一次碰撞。请问如果人们可以无限走下去,会有人产生碰撞吗?

输入格式

第一行一个整数 N N N

接下来 N N N 行,每行两个整数 X i X_i Xi Y i Y_i Yi,表示第 i i i 个人的位置;

最后一行是一个由 LR 组成的长为 N N N 的字符串 S S S

输出格式

如果会有碰撞,输出 Yes,否则输出 No

样例输入 1
3
2 3
1 1
4 1
RRL
样例输出 1
Yes
样例输入 2
2
1 1
2 1
RR
样例输出 2
No
样例输入 3
10
1 3
1 4
0 0
0 2
0 4
3 1
2 4
4 2
4 4
3 3
RLRRRLRLRR
样例输出 3
Yes
数据规模

所有数据保证 2 ≤ N ≤ 2 × 1 0 5 2≤N≤2×10^5 2N2×105 0 ≤ X i ≤ 1 0 9 0≤X_i≤10^9 0Xi109 0 ≤ Y i ≤ 1 0 9 0≤Y_i≤10^9 0Yi109

解题思路

根据题意,我们很容易就能得出碰撞条件:

(1)同一行中,即 y y y相同

(2)行走方向相反

(3)向右走的人在左边,向左走的人在右边

那么我们的思路形成了:

遍历每一行,找出每一行中的 m i n { x ∣ x 为向右走的人的横坐标 } min\{x|x为向右走的人的横坐标\} min{xx为向右走的人的横坐标} m a x { y ∣ y 为向左走的人的横坐标 } max\{y|y为向左走的人的横坐标\} max{yy为向左走的人的横坐标}

接下来的问题就是如何存储数据

显然,想要对应每一个 y y y值开一个数组是不现实的

但是我们简单思考一下,发现也没必要为每一个 y y y值开一个数组

采用sort算法,把相同 y y y值的个体连在一起就可以了

最后,AC代码如下文章来源地址https://www.toymoban.com/news/detail-408346.html

#include <iostream>
#include <algorithm>
using namespace std;
const int max_n = 2e5;
const int max_x = 1e9;
const int max_y = 1e9;
const int NaN = 0x3F3F3F3F;

int n;
struct person { int x, y, dirction; }persons[max_n + 1];

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> persons[i].x >> persons[i].y;
	}
	string str;
	cin >> str;
	for (int i = 0; i < n; i++) {
		if (str[i] == 'R') persons[i + 1].dirction = 0;
		else persons[i + 1].dirction = 1;
	}
	sort(persons + 1, persons + 1 + n, [](person p1, person p2) {
		return p1.y < p2.y;
		});
	int line = -1, l = NaN, r = -1;
	for (int i = 1; i <= n; i++) {
		if (persons[i].y == line) {
			if (persons[i].dirction) r = max(r, persons[i].x);
			else l = min(l, persons[i].x);
		}
		else {
			if (l < r) {
				cout << "Yes" << endl;
				return 0;
			}

			l = NaN; r = -1;
			line = persons[i].y;

			if (persons[i].dirction) r = max(r, persons[i].x);
			else l = min(l, persons[i].x);
		}
	}
	if (l < r) cout << "Yes" << endl;
	else cout << "No" << endl;
	return 0;
}

到了这里,关于[Daimayuan] 碰撞2(C++,模拟)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 世界坐标系、相机坐标系、图像坐标系、像素坐标系

    四个坐标系都是什么? 1.世界坐标系-相机坐标系-图像坐标系-像素坐标系 2.像素坐标系-图像坐标系-相机坐标系-世界坐标系 图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系                     构建世界坐标系只是

    2024年01月21日
    浏览(69)
  • 坐标转换(相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系)

    一般情况下我们所涉及到的坐标包括四个,即相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系。我们本文的讲解思路是在讲解每个坐标转换之前先讲清楚每个坐标系所表示的含义。本文主要参考由高翔主编的视觉SLAM十四讲第五章相机模型。 相机将三维世界的坐

    2024年02月09日
    浏览(74)
  • 关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解

    在项目中,研究标定时,像素坐标与轴位置的关系时,需要用到关于坐标系的转换。在此也就是找到世界坐标系与像素坐标系的转换关系。想理清楚故做如下记录。 四坐标关系图如下: 图中: 世界坐标系(O W —X W Y W Z W ): 一个三维直角坐标系,以其为基准可以描述相机

    2024年02月09日
    浏览(72)
  • 对于SLAM定位中各类坐标系的理解(坐标系,里程计坐标系,基座坐标系与雷达坐标系)

    最近系统性学习了一遍LIO-SAM,开始的时候一直搞不懂里程计坐标系,经过不断学习才有了一点自己的拙见。 引言 :首先我们搞清楚SLAM算法主要是解决建图与定位问题,其更 侧重定位 ,即让机器人知道自己在全局地图的哪个位置,只有这样才能继续后续的预测、感知、控制

    2024年02月03日
    浏览(50)
  • 世界坐标系、相机坐标系和图像坐标系的转换

    之前只是停留在会用的阶段,一直没去读懂计算的原理,今天通读了大佬的文章,写的言简意赅,感谢感谢~~特此记录一下,仅用作个人笔记 贴链接,十分感谢~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 将三维物体转换成照

    2023年04月15日
    浏览(65)
  • 机器人坐标系转换从局部坐标系转换到世界坐标系

    矩阵方式: 下面是代码: 函数方式: 根据三角函数的特性,可以进行一下简化: 下面是简化前的代码示例:

    2024年04月16日
    浏览(66)
  • 相机坐标系、像素坐标系转换

    相机内参矩阵是相机的重要参数之一,它描述了相机光学系统的内部性质,例如焦距、光学中心和图像畸变等信息。在计算机视觉和图形学中,相机内参矩阵通常用于将图像坐标系中的像素坐标转换为相机坐标系中的三维坐标,或者将相机坐标系中的三维坐标投影到图像坐标

    2024年02月13日
    浏览(48)
  • (02)Cartographer源码无死角解析-(80) 核心要点→local坐标系、子图坐标系、切片坐标系、地图坐标系等相转换与联系

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885   文末正下方中心提供了本人 联系方式, 点击本人照片

    2024年02月16日
    浏览(48)
  • 柱坐标系与直角坐标系的转换

    1.柱坐标系转化为直角坐标系:柱坐标系(r,φ,z)与直角坐标系(x,y,z)的转换关系 x=rcosφ y=rsinφ z=z 2.直角坐标系转化为柱坐标系:直角坐标系(x,y,z)与柱坐标系(r,φ,z)的转换关系: r= φ= z=z

    2024年02月11日
    浏览(43)
  • 图像坐标系如何转换到相机坐标系。

    问题描述:图像坐标系如何转换到相机坐标系。 问题解答: 图像坐标系的定义: 图像坐标系是用于描述数字图像中像素位置的坐标系。图像坐标系的原点是相机光轴与成像平面的交点。X轴沿着成像平面的水平方向正向,Y轴沿着成像平面的垂直方向正向。 相机坐标系的定义

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包