【POJ 3179】 Corral the Cows
【题目链接】
http://poj.org/problem?id=3179
【算法】
首先,我们发现答案是具有单调性的,也就是说,如果边长为C的正方形可以,那么比边长C大的正方形也可以,因此,可以二分答案
那么,我们怎么检验呢?
每个点的坐标最大时达到10000,因此,直接二维前缀和显然是会超时的
考虑将坐标离散化,然后求二维前缀和,由于N<=500,所以离散化后最多也只有1000个点
检验时,我们枚举正方形的左上角,用二分求出它的右下角,然后,判断正方形内是否有大于C的草量
【代码】
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#include <stack>
#include <limits.h>
using namespace std;
#define MAXN 510 int C,N,i,j,l,r,mid,ans,tx,ty,len;
int tmp[MAXN<<],s[MAXN<<][MAXN<<],x[MAXN],y[MAXN]; inline int getsum(int xa,int ya,int xb,int yb)
{
return s[xb][yb] - s[xa-][yb] - s[xb][ya-] + s[xa-][ya-];
}
inline bool check(int x)
{
int i,j,tx,ty,pos;
if (x > tmp[len])
{
if (s[len][len] >= C) return true;
else return false;
}
pos = upper_bound(tmp+,tmp+len+,tmp[len]-x+) - tmp - ;
for (i = ; i <= pos; i++)
{
for (j = ; j <= pos; j++)
{
tx = upper_bound(tmp+,tmp+len+,tmp[i]+x-) - tmp - ;
ty = upper_bound(tmp+,tmp+len+,tmp[j]+x-) - tmp - ;
if (getsum(i,j,tx,ty) >= C) return true;
}
}
return false;
} int main()
{ scanf("%d%d",&C,&N);
for (i = ; i <= N; i++)
{
scanf("%d%d",&x[i],&y[i]);
tmp[++len] = x[i];
tmp[++len] = y[i];
}
sort(tmp+,tmp+len+);
len = unique(tmp+,tmp+len+) - tmp - ;
for (i = ; i <= N; i++)
{
tx = lower_bound(tmp+,tmp+len+,x[i]) - tmp;
ty = lower_bound(tmp+,tmp+len+,y[i]) - tmp;
s[tx][ty]++;
}
tmp[++len] = ;
for (i = ; i <= len; i++)
{
for (j = ; j <= len; j++)
{
s[i][j] = s[i-][j] + s[i][j-] - s[i-][j-] + s[i][j];
}
}
l = ; r = ;
while (l <= r)
{
mid = (l + r) >> ;
if (check(mid))
{
r = mid - ;
ans = mid;
} else l = mid + ;
}
printf("%d\n",ans); return ; }
【POJ 3179】 Corral the Cows的更多相关文章
- 【POJ - 2387】Til the Cows Come Home(最短路径 Dijkstra算法)
Til the Cows Come Home 大奶牛很热爱加班,他和朋友在凌晨一点吃完海底捞后又一个人回公司加班,为了多加班他希望可以找最短的距离回到公司.深圳市里有N个(2 <= N < ...
- bzoj 2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 382 Solved: 111[Submit][S ...
- BZOJ2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 284 Solved: 82[Submit][St ...
- BZOJ2293: 【POJ Challenge】吉他英雄
2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 80 Solved: 59[Submit][Stat ...
- BZOJ2287: 【POJ Challenge】消失之物
2287: [POJ Challenge]消失之物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 254 Solved: 140[Submit][S ...
- BZOJ2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 126 Solved: 90[Submit][Sta ...
- BZOJ2296: 【POJ Challenge】随机种子
2296: [POJ Challenge]随机种子 Time Limit: 1 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 114 Solv ...
- BZOJ2292: 【POJ Challenge 】永远挑战
2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 513 Solved: 201[Submit][ ...
随机推荐
- c#中的控件01
1.常用控件: 只读文本:TextBlock.文本框:TextBox.按钮:Button 事件:鼠标移到按钮上的时候显示“大爷您来了”,离开 显示“大爷常来”,Click(点击).Loaded(控件加 ...
- 数据结构(二) 树Tree
五.树 树的定义 树的逻辑表示:树形表示法.文氏图表示法.凹入表示法.括号表示法. 结点:表示树中的元素,包括数据项及若干指向其子树的分支. 结点的度:结点拥有的子树树:树的度:一 ...
- java中线程状态-死亡
线程死亡: 线程会以如下3种方式结束,结束后就处于死亡状态. 1.run()或call()方法执行完成,线程正常结束. 2.线程抛出一个未捕获的Exception或Error 3.直接调用该线程的st ...
- 一次穿墙渗透测试,利用IPC跨域
Shell是怎么拿下的我们就不纠结了. 我们来上传菜刀一句话,来仔细分析分析. 先来看看内网环境把. 很高兴的是现在管理员在线.可以抓去文明密码. 但是很悲催的又是.服务器不支持走TCP协议.HTTP ...
- 如何让Myeclipse已经关闭掉的项目不显示出来
一.打开Package Explorer视图,在它的右上角有一个向下的三角图标. 2.点击后选择Filters,在弹出的Filter配置窗口中选中"Closed Projects" ...
- c++中的函数对象《未完成》
头文件: #pragma once #include<iostream> #include<vector> using namespace std; class Student ...
- Webstorm常用快捷键备忘(Webstorm入门指南)
WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编辑器”.“最智能的JavaSscript IDE ...
- 图示:DOM元素各种位置属性
- 浅谈 session 会话的原理
先谈 cookie 网络传输基于的Http协议,是无状态的协议,即每次连接断开后再去连接,服务器是无法判断此次连接的客户端是谁. 如果每次数据传输都需要进行连接和断开,那造成的开销是很巨大的. 为了解 ...
- 解决socket负载均衡集群方案和代码实现
有一段时间,在考虑下socket 之间集群 可以在Nginx 下可以 但是不同服务器之间怎么通讯呢 后来自己也想可不可以用什么东西或者中间件来通讯 ,后来在百度之下 发现果然就是按照我所想的 ,在网上 ...