牛客假日团队赛43:J Square Overlap

先看题目:https://ac.nowcoder.com/acm/contest/5723/J
题目描述:
给出一些边长都为k的正方形的中心坐标,如果只有一对正方形重叠,则输出重叠面积,如果有多对正方形重叠,输出-1,如果没有正方形重叠,则输出0
解题思路:
画图模拟一下可知,如果两正方形中点坐标为(x1,y1)和(x2,y2),若|x1-x2| < k && |y1-y2| < k时,才能重叠,其重叠形成的矩形的面积为(k-|y1-y2|)*(k-|x1-x2|)
这道题普通n^2搜索是显然过不了的,但是可以思考思考做出优化。
这道题的n^2搜索

for(int i = 1; i < n; i++) {
    for(int j = i+1; j <= n; j++) {
           判断如果重叠,计算面积...
     }
}

但是我们发现,如果提前对矩形按x坐标排序,矩形i与i-1之间都是相邻关系了,实际上对这两个进行判断是否重叠就行了,如果不重叠就更不可能与之前的重叠了。

虽然也是两次循环,但实际上是O(n)

sort(a+1, a+n+1, cmp);
    for(int i = 2; i <= n; i++) {
        for(int j = i-1; j >= 1; j--) {
            判断如果重叠,计算面积...
        }
    }

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool vis[50100];
struct node{
    int x, y;
}a[50100];
bool cmp(node n, node m)
{
    return n.x < m.x;
}
int main()
{
    int n, k, tot=0;
    ll ans = 0;
    scanf("%d%d",&n,&k);
    for(int i = 1; i <= n; i++) {
        scanf("%d%d",&a[i].x,&a[i].y);
    }
    sort(a+1, a+n+1, cmp);
    for(int i = 2; i <= n; i++) {
        for(int j = i-1; j >= 1; j--) {
            int tmp = a[i].x - a[j].x;
            if(tmp  >= k) break;
            if(abs(a[i].x - a[j].x) < k && abs(a[i].y - a[j].y) < k)
            {
                tot++;
                vis[i] = 1; vis[j] = 1;
                ans += (k-abs(a[i].x - a[j].x))*(k-abs(a[i].y - a[j].y));
                if(tot == 2) {
                    printf("-1\n");
                    return 0;
                }
            }
        }
    }
    printf("%lld\n",ans);
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
8542次浏览 77人参与
# 你的实习产出是真实的还是包装的? #
1566次浏览 40人参与
# 米连集团26产品管培生项目 #
5469次浏览 213人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7307次浏览 40人参与
# 简历第一个项目做什么 #
31456次浏览 321人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186738次浏览 1118人参与
# MiniMax求职进展汇总 #
23638次浏览 305人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152219次浏览 887人参与
# 研究所笔面经互助 #
118829次浏览 577人参与
# 重来一次,我还会选择这个专业吗 #
433244次浏览 3926人参与
# 简历中的项目经历要怎么写? #
309873次浏览 4177人参与
# 面试紧张时你会有什么表现? #
30461次浏览 188人参与
# 你今年的平均薪资是多少? #
212936次浏览 1039人参与
# AI时代,哪些岗位最容易被淘汰 #
63209次浏览 791人参与
# 我的求职精神状态 #
447929次浏览 3128人参与
# 你最满意的offer薪资是哪家公司? #
76370次浏览 374人参与
# 正在春招的你,也参与了去年秋招吗? #
363068次浏览 2635人参与
# 你怎么看待AI面试 #
179715次浏览 1222人参与
# 牛客AI文生图 #
21391次浏览 237人参与
# 职能管理面试记录 #
10774次浏览 59人参与
# 网易游戏笔试 #
6438次浏览 83人参与
# 腾讯音乐求职进展汇总 #
160532次浏览 1109人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务