poj_3179 Corral the Cows (二分+二维前缀和+离散化)
【题目链接】
http://poj.org/problem?id=3179
【参考】
http://www.cnblogs.com/evenbao/p/9243183.html
【算法】
- 二分答案+判定
- 二维坐标的离散化去除不存在草的行和列
- 二维前缀和
- lower_bound (>=) upper_bound (>)
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
struct data{int x,y;}a[];
int c,n,tot,i,j,tx,ty;
int rec[][],b[];
void discrete()
{
sort(b+, b+tot+);
tot = unique(b+, b+tot+) - b - ;
for(i = ; i <= n; i++) {
tx = lower_bound(b+,b+tot+,a[i].x) - b;
ty = lower_bound(b+,b+tot+,a[i].y) - b;
rec[tx][ty]++;
}
b[++tot] = ;
for(i = ; i <= tot; i++)
for(j = ; j <= tot; j++)
rec[i][j] = rec[i-][j] + rec[i][j-] - rec[i-][j-] + rec[i][j];
}
bool valid(int cur)
{
int p;
if(cur >= b[tot]) { return true; }
p = upper_bound(b+, b+tot+, b[tot]-cur+) - b - ;
for(i = ; i <= p; i++) {
for(j = ; j <= p; j++) {
tx = upper_bound(b+, b+tot+, b[i]+cur-) - b - ;
ty = upper_bound(b+, b+tot+, b[j]+cur-) - b - ;
if(rec[tx][ty] - rec[i-][ty] - rec[tx][j-] + rec[i-][j-] >= c) return true;
}
}
return false;
}
int main()
{
scanf("%d%d", &c, &n);
for(i = ; i <= n; i++)
scanf("%d%d", &a[i].x, &a[i].y),
b[++tot] = a[i].x, b[++tot] = a[i].y;
discrete();
int l = , r = ;
while(l<r) {
int mid = (l + r) >> ;
if(valid(mid)) r = mid;
else l = mid + ;
}
printf("%d\n", l);
return ;
}
poj_3179 Corral the Cows (二分+二维前缀和+离散化)的更多相关文章
- Acwing-121-赶牛入圈(二分, 二维前缀和,离散化)
链接: https://www.acwing.com/problem/content/123/ 题意: 农夫约翰希望为他的奶牛们建立一个畜栏. 这些挑剔的畜生要求畜栏必须是正方形的,而且至少要包含C单 ...
- Gym 102091L Largest Allowed Area 【二分+二维前缀和】
<题目链接> 题目大意:给你一个由01组成的矩形,现在问你,该矩形中,最多只含一个1的正方形的边长最长是多少. 解题分析: 用二维前缀和维护一下矩形的01值,便于后面直接$O(1)$查询任 ...
- cf1073c 二分+二维前缀和
#include<bits/stdc++.h> using namespace std; #define maxn 200005 char s[maxn]; ][maxn]; map< ...
- Codeforces 1262E Arson In Berland Forest(二维前缀和+二维差分+二分)
题意是需要求最大的扩散时间,最后输出的是一开始的火源点,那么我们比较容易想到的是二分找最大值,但是我们在这满足这样的点的时候可以发现,在当前扩散时间k下,以这个点为中心的(2k+1)2的正方形块内必 ...
- [CSP-S模拟测试]:physics(二维前缀和+二分+剪枝)
题目传送门(内部题26) 输入格式 第一行有$3$个整数$n,m,q$.然后有$n$行,每行有一个长度为$m$的字符串,$+$表示正电粒子,$-$表示负电粒子.然后有$q$行,每行$2$个整数$x,y ...
- C - Monitor CodeForces - 846D (二维前缀和 + 二分)
Recently Luba bought a monitor. Monitor is a rectangular matrix of size n × m. But then she started ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
- COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)
题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...
- poj-3739. Special Squares(二维前缀和)
题目链接: I. Special Squares There are some points and lines parellel to x-axis or y-axis on the plane. ...
随机推荐
- Mac升级系统后 Pod Install报错-不能用 解决办法
brew reinstall cocoapods brew install ruby brew link --overwrite cocoapods 最近将Mac OS升级到10.15.1 ,再回来初 ...
- React Native 之FlatList
1.新建项目 2.因为要用到导航跳转, 所以添加依赖,,这里拷贝这个: "dependencies": { "@types/react": "^16. ...
- Linux内核设计与实现 总结笔记(第十五章)进程地址空间
一.地址空间 进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存中的地址. 每个进程都有一个32位或64位的平坦地址空间,空间的具体大小取决于体系结构.“平坦”指的是地址空间范围是一 ...
- Java——容器(泛型)
[泛型] 起因:JDK1.4之前类型不明确 <1>装入集合的类型都被当做Object对待,从而失去自己的实际类型. <2>从集合中取出时往往需要转型,效率低,且很容易出错 ...
- python 获取list某个元素下标
index() 函数用于从列表中找出某个值第一个匹配项的索引位置. list.index(x, start, end) #start end 指示搜索的起始和结尾位置,缺省为整个数组 x-- 查找的对 ...
- 一本通例题埃及分数—题解&&深搜的剪枝技巧总结
一.简述: 众所周知,深搜(深度优先搜索)的时间复杂度在不加任何优化的情况下是非常慢的,一般都是指数级别的时间复杂度,在题目严格的时间限制下难以通过.所以大多数搜索算法都需要优化.形象地看,搜索的优化 ...
- [LOJ2288][THUWC2017]大葱的神力:搜索+背包DP+费用流+随机化
分析 测试点1.2:搜索+剪枝. 测试点3:只有一个抽屉,直接01背包. 测试点4.5:每个物品体积相同,说明每个抽屉能放下的物品个数固定,建图跑费用流. 测试点6:每个物品体积相近,经过验证发现每个 ...
- three arrays
three arrays 字典树上贪心 #include<bits/stdc++.h> using namespace std; ][][]; ][]; ]; ]; ][]; ][]; i ...
- border、outline、boxshadow那些事
border 边框是我们美化网页.增强样式最常用的手段之一.例如: <div class="text"></div> .text { width: 254p ...
- 对象数组(JSON) 根据某个共同字段 分组
1.在前端页面用js处理 转载https://www.cnblogs.com/rysinal/p/5834446.html 为了第二种方法对比,特意把id 转化为pid var arr = [ {&q ...