zoukankan      html  css  js  c++  java
  • 矩形重叠【网易2019实习生招聘笔试】

    平面内有n个矩形, 第i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])。

    如果两个或者多个矩形有公共区域则认为它们是相互重叠的(不考虑边界和角落)。

    请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠。


    输入描述:

    输入包括五行。
    第一行包括一个整数n(2 <= n <= 50), 表示矩形的个数。
    第二行包括n个整数x1[i](-10^9 <= x1[i] <= 10^9),表示左下角的横坐标。
    第三行包括n个整数y1[i](-10^9 <= y1[i] <= 10^9),表示左下角的纵坐标。
    第四行包括n个整数x2[i](-10^9 <= x2[i] <= 10^9),表示右上角的横坐标。
    第五行包括n个整数y2[i](-10^9 <= y2[i] <= 10^9),表示右上角的纵坐标。

    输出描述:

    输出一个正整数, 表示最多的地方有多少个矩形相互重叠,如果矩形都不互相重叠,输出1。

    输入例子1:

    2
    0 90
    0 90
    100 200
    100 200

    输出例子1:

    2

    判断矩形所有的点是否在左下和右下中间,注意边界。

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 55;
    int X1[N], Y1[N], X2[N], Y2[N];
    set<int>x, y;
    int main() {
        int n;
        cin>>n;
        for(int i=1; i<=n; i++) scanf("%d", &X1[i]), x.insert(X1[i]);
        for(int i=1; i<=n; i++) scanf("%d", &Y1[i]), y.insert(Y1[i]);
        for(int i=1; i<=n; i++) scanf("%d", &X2[i]), x.insert(X2[i]);
        for(int i=1; i<=n; i++) scanf("%d", &Y2[i]), y.insert(Y2[i]);
        int ans = 0;
        for(set<int>::iterator i=x.begin(); i!=x.end(); i++) {
            for(set<int>::iterator j=y.begin(); j!=y.end(); j++) {
                int xx = *i, yy = *j, sum=0;
                for(int k=1; k<=n; k++) {
                    if(xx>=X1[k]&&xx<X2[k]&&yy>=Y1[k]&&yy<Y2[k])
                        sum++;
                }
                ans = max(sum, ans);
            }
        }
        printf("%d
    ", ans);
        return 0;
    }


  • 相关阅读:
    音频(一)_音频认知(1.音频释义)
    音频_写在前面的话
    SignInWithAppleId(Apple登录接入)_unity篇
    编程工具~用了都说好的快捷键大杂烩
    Unity的PlayerPrefs存储路径
    unity如何判断应用的运行平台
    Unity资源加载机制www的坑
    VSCode快捷键
    MD5加密字符串并转化为base64(C#和PHP代码相同实现)
    转载:关于 Google Chrome 中的全屏模式和 APP 模式
  • 原文地址:https://www.cnblogs.com/lesroad/p/10398646.html
Copyright © 2011-2022 走看看