P2202 [USACO13JAN]方块重叠Square Overlap

题目描述

Farmer John is planning to build N (2 <= N <= 50,000) square fenced-in pastures on his farm, each of size exactly K x K (1 <= K <= 1,000,000). Pasture i is centered at point (x_i, y_i) with integer coordinates in the range -1,000,000...1,000,000. However, in his haste to complete his plans, FJ realizes that he may have accidentally placed two pastures in locations that overlap (by overlap, this means the two pastures share a positive area in common). No two pastures share the exact same center point.

Given the locations of each of the planned square pastures, please help FJ compute the area shared by the two overlapping pastures. Output zero if no two squares overlap, and -1 if overlap occurs between more than a single pair of pastures.

在一个直角坐标系中,有N个边长为K的正方形。

给出每一个正方形的中心,请判断所有的正方形是否有重叠。

输入数据保证每一个正方形的中心不重合

输入输出格式

输入格式:

  • 第1行 :两个正整数: N , K

其中:2 <= N <= 50 000 ,1 <= K <= 1 000 000 ,K保证是偶数

*第2 .. i+1行:每行有两个整数xi,yi,描述了第i个正方形的中心。

其中:xi,yi均在[-1 000 000,1 000 000]内

输出格式:

只输出一行:

如果没有正方形重叠,输出“0”;如果有且只有一对正方形重叠,输出它们重叠的面积;如果有两对及以上的正方形重合,输出"-1";

注意:在输出答案后一定要输换行符!

输入输出样例

输入样例#1: 复制

4 6
0 0
8 4
-2 1
0 7
输出样例#1: 复制

20
#include<cstdio>
#include<iostream>
#include<algorithm>
#define maxn 50010
using namespace std;
int n,k,ans;
struct node{
int x,y;
}p[maxn];
bool cmp(node a,node b){
if(a.x!=b.x)return a.x<b.x;
return a.y<b.y;
}
int Abs(int x){
if(x>=)return x;
return -x;
}
int check(int x,int y){
int x1=p[x].x,x2=p[y].x;
int y1=p[x].y,y2=p[y].y;
if(x1==x2){
if(y2-y1>=k)return ;
int d=y2-y1;
return k*(k-d);
}
if(y1==y2){
if(x2-x1>=k)return ;
int d=x2-x1;
return k*(k-d);
}
if(Abs(x1-x2)>=k&&Abs(y1-y2)>=k)return ;
int mx1=max(x1-k/,x2-k/),mn1=min(x1+k/,x2+k/);
int mx2=max(y1-k/,y2-k/),mn2=min(y1+k/,y2+k/);
return (mx1-mn1)*(mx2-mn2);
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y);
sort(p+,p+n+,cmp);
int t=;
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
int now=check(i,j);
if(now>){
if(t>=){
puts("-1");return ;
}
ans+=now;
t++;
}
}
}
if(ans)printf("%d\n",ans);
else puts("");
}

70分 暴力

/*
用一个bool变量have记录之前是否已经找到重叠正方形
对于第一个中心i:对横坐标从小到大进行排序后再按横坐标从小到大枚举
对于第二个中心j:枚举范围为[1,i-1],并且从后往前进行枚举,我们设一个变量temp为点j到点i的距离,那么当temp>=K时就直接跳出对j的枚举过程。如果temp<K 并且满足 |Yi-Yj|<K 且 have=false 就更新ans并标记have , 否则have=true直接输出-1即可。
*/
#include<iostream>
#include<algorithm>
#include<cstdio>
#define maxn 50010
using namespace std;
int n,k;
struct node{int x,y;}s[maxn];
int ans=,have;
bool cmp(node a,node b){return a.x<b.x;}
int abs(int x){
if(x>=)return x;
return -x;
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d%d",&s[i].x,&s[i].y);
sort(s+,s+n+,cmp);
for(int i=;i<=n;i++){
int tmp=;
for(int j=i-;j>=;j--){
tmp+=(s[j+].x-s[j].x);
if(tmp>=k)break;
if(abs(s[i].y-s[j].y)<k){
if(have){puts("-1");return ;}
have=;
ans=(k-tmp)*(k-abs(s[i].y-s[j].y));
}
}
}
printf("%d\n",ans);
return ;
}

100分

洛谷P2202 [USACO13JAN]方块重叠Square Overlap的更多相关文章

  1. 洛谷P3068 [USACO13JAN]派对邀请函Party Invitations

    P3068 [USACO13JAN]派对邀请函Party Invitations 题目描述 Farmer John is throwing a party and wants to invite so ...

  2. 洛谷 P3068 [USACO13JAN]派对邀请函Party Invitations

    P3068 [USACO13JAN]派对邀请函Party Invitations 题目描述 Farmer John is throwing a party and wants to invite so ...

  3. 洛谷P3070 [USACO13JAN]岛游记Island Travels

    P3070 [USACO13JAN]岛游记Island Travels 题目描述 Farmer John has taken the cows to a vacation out on the oce ...

  4. 洛谷 P3071 [USACO13JAN]座位Seating-线段树区间合并(判断找,只需要最大前缀和最大后缀)+分治+贪心

    P3071 [USACO13JAN]座位Seating 题目描述 To earn some extra money, the cows have opened a restaurant in thei ...

  5. 洛谷 P3071 [USACO13JAN]座位Seating(线段树)

    P3071 [USACO13JAN]座位Seating 题目链接 思路: 一开始把题给读错了浪费了好多时间呜呜呜. 因为第二个撤离操作是区间修改,所以我们可以想到用线段树来做.对于第一个操作,我们只需 ...

  6. 洛谷 P2205 [USACO13JAN]画栅栏Painting the Fence

    传送门 题目大意: 开始站在原点,给出一系列操作 x L/R,表示向左或向右走几步. 最多会移动到离原点1,000,000,000单位远的地方. n次操作,n<=100000 问走过k次的地方有 ...

  7. 洛谷 P2205 [USACO13JAN]画栅栏

    这题其实没什么,但用到的算法都十分有用.做一个不恰当的比喻,这是一只必须用牛刀杀的鸡,但因为我这个蒟蒻杀不死牛,所以只能找只鸡来练练手. 题目描述 Farmer John 想出了一个给牛棚旁的长围墙涂 ...

  8. 洛谷——P2205 [USACO13JAN]画栅栏Painting the Fence

    题目描述 Farmer John has devised a brilliant method to paint the long fence next to his barn (think of t ...

  9. 洛谷P3069 [USACO13JAN]牛的阵容Cow Lineup(尺取法)

    思路 考虑比较朴素的解法,枚举每个长度为\(k+1\)的区间,然后统计区间中出现次数最多的颜色.这样的话复杂度为\(O(n*k)\)的,显然不行. 观察到统计每个区间中出现次数最多的颜色中,可以只用看 ...

随机推荐

  1. openlayers 3加载GeoServer发布的wfs类型服务

    转:https://blog.csdn.net/u013323965/article/details/52449502 问题产生:      openlayer3加载WFS存在跨域问题,需要用json ...

  2. hibernate复习第(4)天

    1.hibernate的映射类型.hbm.xml中property中的type属性.这个type属性是表示持久化类中的属性对应数据库中的什么数据类型,用来构建一种映射type的可选值:hibernat ...

  3. OpenCv-Python 图像滤波

    均值滤波 均值滤波函数cv2.blur() import cv2 img = cv2.imread('01.jpg') blur = cv2.blur(img,(5,5)) cv2.imshow( ...

  4. properties使用

    properties可以load store 注释可以采用 "#" 或者"!" 分隔采用"="或者":" 分行采用&qu ...

  5. 删除文件时提示 你需要来自system的权限才能对此文件夹进行更改

    问题描述: 我的计算机是Win7 x64操作系统,在我的计算机的F盘中,不知道什么时候多了个“12e4k69m762nzcgt8zx”这样一个文件夹,应该是某个软件自己创建并留下的文件夹,想删除掉则提 ...

  6. bzoj 2850 巧克力王国 —— K-D树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2850 只要暴力判断是否全选一个子树或全不选,如果都不是就进入查询: 要注意值有负,所以不是直 ...

  7. CCNet说明文档

    1.CCNet安装步骤 1)    安装CCNet服务器端:CruiseControl.NET-1.8.5.0-Setup.exe 2)    安装CCNet客户端:CruiseControl.NET ...

  8. python 基础 字典 增删改查

    content = {"name":"wd","pc":{"phone":111111,"age": ...

  9. 0011_练习题d1

    __author__ = 'qq593' #!/usr/bin/env python #-*- coding:utf-8 -*- #使用while循环输入1 2 3 4 5 6 8 9 10 a=1 ...

  10. mysql四个默认数据库

    1.Master数据库  Master数据库记录了Sqlserver所有的服务器级系统信息,所有的注册帐户和密码,以及所有的系统设置信息,还记录了所有用户定义数据库的存储位置和初始化信息. 2.Tem ...