洛谷 P2202 [USACO13JAN]方块重叠Square Overlap
洛谷 P2202 [USACO13JAN]方块重叠Square Overlap
Description
在一个直角坐标系中,有N个边长为K的正方形。
给出每一个正方形的中心,请判断所有的正方形是否有重叠。
输入数据保证每一个正方形的中心不重合
Input
* 第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]内
Output
只输出一行:
如果没有正方形重叠,输出“0”;如果有且只有一对正方形重叠,输出它们重叠的面积;如果有两对及以上的正方形重合,输出"-1";
注意:在输出答案后一定要输换行符!
Sample Input
4 6 0 0 8 4 -2 1 0 7
Sample Output
20
题解:
- 模拟。
- 正解貌似是线性扫描,其实是优化的暴力。但是我这种本人玄学优化的代码就卡过去了。
- 正常写就是直接判断是否重叠然后算重叠面积,O(n ^ 2)
- 我无非就是以x为关键字排了个序,其它做法同上,O(n * ?),
轻轻松松被卡成O(n ^ 2) - 这题稍微麻烦点的就是算重叠面积。首先重叠面积 = 重叠水平距离 * 重叠竖直距离。
- 水平距离因为是按照x排了序的,所以很容易得出。竖直距离是需要分类讨论一下,经过我手画之后,有以下3种情况:
- 然后依据图片分别就可以容易算出竖直距离了。
#include <iostream>
#include <cstdio>
#include <algorithm>
#define N 50005
using namespace std;struct A {int x, y;} a[N];
int n, k, ans, tot;int read()
{int x = 0, f = 1; char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}return x *= f;
}bool cmp(A u, A v) {return u.x < v.x;}int main()
{n = read(), k = read(), k /= 2;for(int i = 1; i <= n; i++) a[i].x = read(), a[i].y = read();sort(a + 1, a + 1 + n, cmp);for(int i = 1; i < n; i++){int j = i + 1;while(a[i].x + k > a[j].x - k && j <= n){int len1 = a[i].x + k - a[j].x + k, len2 = 0, tmp;if(a[i].y == a[j].y) len2 = 2 * k;else if(a[i].y + k >= a[j].y - k && a[j].y - k >= a[i].y - k) len2 = a[i].y + k - a[j].y + k;else if(a[i].y - k <= a[j].y + k && a[j].y + k <= a[i].y + k) len2 = a[j].y + k - a[i].y + k;tmp = len1 * len2;if(tmp){ans = tmp;if(++tot == 2) {cout << -1 << endl; return 0;}}j++;}}if(!tot) cout << 0 << endl;else cout << ans << endl;return 0;
}
转载于:https://www.cnblogs.com/BigYellowDog/p/11323486.html
洛谷 P2202 [USACO13JAN]方块重叠Square Overlap相关推荐
- 大力stl——P2202 [USACO13JAN]方块重叠Square Overlap
https://daniu.luogu.org/problem/show?pid=2202#sub 总觉的自己的stl不好,现在是要好好补一补: 首先这道题目大家去看zhzh2001的题解: 我们需要 ...
- 题解 洛谷 P3069 [USACO13JAN]牛的阵容Cow Lineup
洛谷P3069[USACO13JAN]牛的阵容CowLineup\color{#00F}{洛谷\ P3069\ [USACO13JAN]牛的阵容Cow Lineup}洛谷 P3069 [USACO13 ...
- 洛谷 P3041 视频游戏的连击Video Game Combos(AC自动机+拓扑排序+数位DP)
洛谷 P3041 视频游戏的连击Video Game Combos 难度一般,不过这个数位DP其实应该叫做记忆化搜索 题意:玩游戏时可以通过按键组合打出combo技能:然后是已知N个combo的按键方 ...
- 洛谷 P1019 单词接龙 (DFS)
题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...
- 洛谷-DFS-1019-单词接龙-个人AC题解和公共AC题解笔记
学习内容: 预处理 万能头文件 string的使用 话不多说,直奔主题 本人AC代码 #include<iostream> #include<cstdio> #include& ...
- 【动态规划】洛谷 P1282 多米诺骨牌
[动态规划]洛谷 P1282 多米诺骨牌 时间限制: 1 Sec 内存限制: 128 MB 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下 ...
- 洛谷 深基 第1部分 语言入门 第5章 数组与数据批量存储
P1428 小鱼比可爱 小鱼比可爱 - 洛谷 P1427 小鱼的数字游戏 小鱼的数字游戏 - 洛谷 P5727 [深基5.例3]冰雹猜想 [深基5.例3]冰雹猜想 - 洛谷 P5727 [深基5.例3 ...
- 深搜+广搜——Lake Counting S(洛谷 P1596)
题目选自洛谷P1596 这道题目我觉得是比较综合的搜索题了,可以用dfs.bfs来解题.下面给出2种方法的思路: 首先,确定什么情况是一个水坑: 对于每一个'w' ,如果在八个方向上有于其相邻的'w' ...
- 深度优先搜索——单词接龙(洛谷 P1019)
题目选自洛谷P1019 首先在题意上可能有些误解. 两个单词合并时,合并部分取的是最小重叠部分 相邻的两部分不能存在包含关系就是说如果存在包含关系,就不能标记为使用过. 每个单词最多出现两次. (其实 ...
最新文章
- 最近5年,诺贝尔化学奖都颁给了谁?
- 耗时6个月整理的最全Java资源,限时删
- 【扫盲帖】Java、JavaScript、JSP、JScript 的区别与联系
- DevExpress ChartControl大数据加载时有哪些性能优化方法
- 算法杂货铺——k均值聚类(K-means)
- 2020 阿里云原生实战峰会即将开幕 云原生落地的正确姿势
- 恒生电子实施怎么样_蓝思科技今年来涨幅超166%,消费电子主题基金如何挑选?...
- VLAN访问控制列表(VACL)的配置方法
- Java核心(二)深入理解线程池ThreadPool
- tensorflow2.1学习--常用函数三
- andrioid .9.png图片的制作
- python试题库_python 题库
- 微信小程序蓝牙打印开发心得
- redis抽奖并发_redis并发操作(lpop/lpush实现)
- HBuilder打包App教程
- s-function的介绍
- HTML--图片的插入
- Java哪些是线程安全的_Java集合中那些类是线程安全的
- 26.java-BufferedWriter写文件
- Elasticsearch:Rank feature query - 排名功能查询