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. ...
随机推荐
- hadoop中yarn
一.yarn的概述 Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统,Yarn从hadoop 2引入,最初是为了改善Map ...
- Pytorch详解NLLLoss和CrossEntropyLoss
是什么? https://www.cnblogs.com/marsggbo/p/10401215.html 具体pytorch怎么运算的 https://blog.csdn.net/qq_222102 ...
- mysql 语句积累
show tables; 显示表 DROP TABLE IF EXISTS emp;删除表
- 进阶:python3实现 插入排序
一图胜千言,插入排序的核心逻辑如下: 将数据分成两半,前一半是已排好序的,后一半是待排序的 每次取后一半中的第一个数,在已排序的一半中,逆序依次比较,找到要插入的位置 记录插入的位置,在最后判断是否需 ...
- idea 打包model 为jar包
1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> From modules with dep ...
- uva live 7638 Number of Connected Components (并查集)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- react 类样式的一些使用方法
在 css类不想使用穿透的状态,可以再webpack配置 modules:true,它位于css-loader下,此外调用css的类时可能会自动生成一个hash值,这时候如果想显示本来的名字,可以打 ...
- 【opencv使用笔记】一:Python版本安装与测试
安装完opencv3.4.1并且Cmake后,发现Python不能import,又装了Python版本的opencv; 由于是在conda环境下安装,opencv-python-4.0.1.24,最终 ...
- Django路由小知识
from django.urls import path,re_path from app01 import views urlpatterns = [ re_path(r'^articles/200 ...
- python值的引用传递和go语言的值传递
一:值传递 实参a 原本指向地址 1638212,代表1638212这个地址的值是3.在swap函数中,实参a将值拷贝给形参a,形参a此时也在内存中拥有地址,地址= xxxx,值为3,在所有的函数体内 ...