矩阵重叠问题判断

这篇具有很好参考价值的文章主要介绍了矩阵重叠问题判断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创作背景

看到一道题目有感而发想写一篇题解,涉及的是一种逆向思维

桌面窗体重叠 - 洛谷https://www.luogu.com.cn/problem/U399827题目来源于《信息学奥赛课课通》

矩阵重叠问题判断,信息学竞赛C++学习,算法

大致就是给一个长方形的左上顶点坐标(x1,y1)和右下顶点坐标(x2,y2),一个长方形的左上顶点坐标(x3,y3),右下顶点(x4,y4),然后判断这两个长方形是否重合。

思路呈现

1.一开始想的是从判断一个点是否在一个长方体内->判断一个长方形是否有点在另一个长方形中

代码如图:(显而易见的蠢)

矩阵重叠问题判断,信息学竞赛C++学习,算法

2.逆向思维的利用 

判断两个长方形是否不重叠  判断两条线段是否相交->判断两个长方形是否相交

比如说在x轴上,我判断(x1,0)和(x2,0)的线段和(x3,0)和(x4,0)的线段是否相交的话,要考虑四种情况(因为不知道x1和x3的大小、x2和x4的大小)

if(x3<x1<x4||x3<x2<x4||x1<x3<x2||x1<x4<x2)

但是如果考虑不相交的话,最小值大于最大值,最大值小于最小值就不想交了

if(x3>x2||x4<x1)

显然简单了很多。

然后在y轴上考虑不相交

if(y3>y2||y4<y1)

只要在x、y轴上有一个判断不相交,这这两个长方形也不会相交,所以逻辑用或

合起来判断是否相交,true为相交。

if(!(x3>x2||x4<x1||y3>y2||y4<y1))

再利用德·摩根定律

非(P 且 Q) = (非 P) 或 (非 Q)

非(P 或 Q) = (非 P) 且 (非 Q)


可以把条件更改为如下的条件:

if(x3<=x2&&x4>=x1&&y3<=y2&&y4>=y1)

完整代码:

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int main() {
int x1,x2,x3,x4,y1,y2,y3,y4;
cin>>x1>>x2>>y1>>y2>>x3>>x4>>y3>>y4;
if(x3<=x2&&x4>=x1&&y3<=y2&&y4>=y1){
	int left=max(x1,x3);
	int right=min(x2,x4);
	int top=max(y1,y3);
	int bottom=min(y2,y4);
//	cout<<left<<endl;
//	cout<<right<<endl;
//	cout<<top<<endl;
//	cout<<bottom<<endl;
	int s=(right - left) * (bottom - top);
	cout<<s;
}else{
	cout<<0;
} 
return 0;
}

扩展

如何用编程N个人中解决至少两个人的生日在同一天的问题

1.至少两个人,那要考虑2个人,3个人,......n个人生日在同一天的情况。就比较复杂。

2.使用了逆向思维的话

过来想,N个人生日全不相同的概率:365/365*(364/365)*(363/365)*...*[(366-n)/365]…………[即后N-1个人与前面的人都不一样]
=364!/[(365-n)!·365^(N-1)]

(第一个人的生日可以在任何一天,第二个人的生日是除了第一个人生日那天外的任何一天.......)
所以至少有两人是同一天生日的概率为1-364!/[(365-n)!·365^(N-1)].文章来源地址https://www.toymoban.com/news/detail-814668.html

到了这里,关于矩阵重叠问题判断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 学习进度——附《全国青少年信息学奥林匹克系列竞赛大纲》

    得分:150 失误:当题目同行输入两个字符串时,观察中间是否有空格(复制到txt上)。 得分:250 失误:看清高精除低精还是高精除高精。 得分:280 失误:freopen文件名out错写成in。 得分:60 失误:逆元。 得分:90. 注:知识点总结在每个知识对应的板块那里 1005 : ​ 把不是

    2024年02月07日
    浏览(61)
  • C++ 算法竞赛、05 周赛篇 | AcWing 第85场周赛

    竞赛 - AcWing 4791. 死或生 - AcWing题库 简单题 4792. 最大价值 - AcWing题库 贪心,先找到最大价值的字母,往最后面插最大的 4793. 危险程度 - AcWing题库 把图分成若干个连通块,每个连通块假设有 k 个点,最多会反应 k - 1 次 因此题目转变为求连通块数量,假设为 t,答案就是 (2^

    2024年02月09日
    浏览(27)
  • C++ 算法竞赛、03 周赛篇 | AcWing 第4场周赛

    竞赛 - AcWing 3694. A还是B - AcWing题库 简单题 3695. 扩充序列 - AcWing题库 考查递归。可以发现最终序列除中点,左右两段都是相等的,可以依据这个特性来递归 超级长的序列缩小 (log_2n) 次,每次将 k 坐标映射到缩小的各个序列上,k肯定是其中一个序列的中点 3696. 构造有向无环

    2024年02月09日
    浏览(30)
  • C++ 算法竞赛、08 周赛篇 | AcWing 第94场周赛 ⭐

    4870. 装物品 - AcWing题库 4870. 装物品 - AcWing题库 巨简单题 4871. 最早时刻 - AcWing题库 考查堆优化版迪杰斯特拉变形 越早到达,越早离开 = 每个点维护一个最早到达时刻 如果 delay 小于 0,就不能用迪杰斯特拉算法 4872. 最短路之和 - AcWing题库 最终结果可能是 (500^2 * 10^5) 可能会

    2024年02月08日
    浏览(12)
  • C++ 算法竞赛、04 周赛篇 | AcWing 第5场周赛

    竞赛 - AcWing 3726. 调整数组 - AcWing题库 简单题,判断奇偶数是否同时存在 3727. 乘方相加 - AcWing题库 记录 每个数据 的 k 进制 各个位数的值 保存到数组,题目要求每位最多为 1,超过 1 则无法达到 3728. 城市通电 - AcWing题库 图是稠密图,用朴素版Prim求, (O(n^2)) 每点建立发电站

    2024年02月09日
    浏览(31)
  • C++ 算法竞赛、07 周赛篇 | AcWing 第120场周赛

    竞赛 - AcWing 5146. 最大GCD - AcWing题库 不难发现,最大公约数的条件是 (GCD(lfloor frac{n}{2} rfloor ,lfloor frac{n}{2} rfloor * 2)) 5147. 数量 - AcWing题库 不含 4 和 7 以外 (Rightarrow) 只含 4 和 7,每位只有两种情况,最多到 1e9,即 (2^9) 个情况,爆搜枚举即可 AcWing 5148. 字符串匹配 -

    2024年02月08日
    浏览(29)
  • C++ 算法竞赛、01 周赛篇 | AcWing 第1场周赛

    竞赛 - AcWing 3577. 选择数字 - AcWing题库 暴力两层循环 两个数组的最大值相加一定是新数 3578. 最大中位数 - AcWing题库 整数二分问题。求中位数,并依次递增,计算所需的操作次数。求最后一个操作次数总和 = k 的中位数值 如果 mid - a[i] 0 ,意味着该数比中位数大, 不需要操作

    2024年02月10日
    浏览(10)
  • C++ 算法竞赛、06 周赛篇 | AcWing 第97场周赛

    4944. 热身计算 - AcWing题库 4944. 热身计算 - AcWing题库 4945. 比大小 - AcWing题库 考查K进制转换十进制 4946. 叶子节点 - AcWing题库 无向边要开两倍点数的数组,见常量 M cnt 统计每个有效叶子节点的个数 st 记录遍历过的点,让每个点只遍历一次 dfs count 统计还有几条边没走,0 条则为

    2024年02月09日
    浏览(30)
  • C++ 算法竞赛、02 周赛篇 | AcWing 第2场周赛

    竞赛 - AcWing AcWing 3626. 三元一次方程 - AcWing 两层循环 3627. 最大差值 - AcWing题库 考查贪心,所有输入的不是0的数排序,每次操作取最大的数++,由于每个数最大可以是1e9,int可能溢出,需要用 long long 3628. 边的删减 - AcWing题库 刚开始有点傻,打算用克鲁斯卡尔生成最小生成树

    2024年02月10日
    浏览(11)
  • 【程序设计竞赛算法】背包问题——贪心法

    贪心算法是一种基于贪心策略的算法,它在每一步选择中都采取当前状态下的最优选择,以期望最终达到全局最优解。 背包问题是一个经典的组合优化问题,可以分为 0-1 背包问题和分数背包问题。其中,0-1 背包问题要求物品只能选择一次,而分数背包问题允许物品被选择多

    2024年02月03日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包