POJ3179 Corral the Cows题解
我就是个垃圾……一道水题能写这么长时间……
首先看到题就想到了二维前缀和+二分边长,但地图边长10000,得离散化。
于是这个离散化就把我搞疯了,淦。
这反映出现在基础知识还是不牢固,相当不牢固。
复杂度不会算,淦。(但应该不会超过\(O(C^2\log N)\)
具体看代码吧……
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct P{int x,y;}a[505];
int c,n,dx,dy,xx[10005],yy[10005];
int x[505],y[505],s[505][505];
bool check(int k)
{
for(int i=xx[k];i<=dx;++i) //如果边长是k,那么从k的不同的数开始找起
for(int j=yy[k];j<=dy;++j)
{
int x0=0,y0=0;
if(x[i]-k>=0) x0=xx[x[i]-k]; //这里是一个映射原坐标的判断,这样的对应应该是没问题的
if(y[j]-k>=0) y0=yy[y[j]-k];
if(s[i][j]-s[x0][j]-s[i][y0]+s[x0][y0]>=c) return 1;
}
return 0;
}
int main()
{
scanf("%d%d",&c,&n);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&a[i].x,&a[i].y);
xx[a[i].x]++,yy[a[i].y]++; //这是开了个桶
}
for(int i=1;i<=10000;++i)
{
if(xx[i]) x[++dx]=i; //如果这个桶有值,那么就把它扔进一个映射的数组里
xx[i]=dx; //可以发现x与xx是互为逆运算的,也就是x[i]表示第i个不同的数是几,
//xx[i]表示i这个数是第几个不同的数
if(yy[i]) y[++dy]=i;
yy[i]=dy;
}
for(int i=1;i<=n;++i) s[xx[a[i].x]][yy[a[i].y]]++; //我们用编号来做前缀和
for(int i=1;i<=dx;++i)
for(int j=1;j<=dy;++j)
s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
int l=1,r=10000,ans;
while(l<=r)
{
int mid=l+r>>1;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d",ans);
return 0;
}
POJ3179 Corral the Cows题解的更多相关文章
- poj3179 Corral the Cows
论水题与难题的差距:在于一个upper_bound 那么,这题一看就很显然了:因为答案满足二分性质所以我们二分. 然后我们再建造一个二维前缀和,每次判断的时候怎么办呢? 我先以为是贪心:选择以每个点为 ...
- $Poj3179\ Corral\ the\ Cows$ 二分+离散化+二维前缀和
Poj $Description$ 在一个二维平面上,有$N$颗草,每颗草的大小是$1*1$,左下角坐标为$x_i,y_i$.要求一个正方形,正方形的边平行于$x$或$y$轴,正方形里面包含至少$C$ ...
- 【BZOJ1720】[Usaco2006 Jan]Corral the Cows 奶牛围栏 双指针法
[BZOJ1720][Usaco2006 Jan]Corral the Cows 奶牛围栏 Description Farmer John wishes to build a corral for h ...
- POJ 3179 Corral the Cows
Corral the Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1352 Accepted: 565 De ...
- 洛谷 P2862 [USACO06JAN]把牛Corral the Cows 解题报告
P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...
- 洛谷——P2862 [USACO06JAN]把牛Corral the Cows
P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...
- 洛谷P2862 [USACO06JAN]把牛Corral the Cows
P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...
- 洛谷 P2862 [USACO06JAN]把牛Corral the Cows
P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...
- POJ2182 Lost Cows 题解
POJ2182 Lost Cows 题解 描述 有\(N\)(\(2 <= N <= 8,000\))头母牛,每头母牛有自己的独一无二编号(\(1..N\)). 现在\(N\)头母牛站成一 ...
随机推荐
- 我进金山wps啦!
成功进入金山wps暑期精英训练营,希望能够学到很多知识,写这篇文章纪念一下
- Java线程池底层源码分享和相关面试题(持续更新)
线程池各个参数讲解 public ThreadPoolExecutor(int corePoolSize, //线程池核心工作线程数量,比如newFixedThreadPool中可以自定义的线程数量就 ...
- iSCSI网络磁盘
一.fdisk 划分 分区 [root@server0 ~]# lsblk [root@server0 ~]# fdisk /dev/vdb 三个主分区 , 分别2个G大小 两个逻辑分区 , 分别1个 ...
- 【ElasticSearch】给ElasticSearch数据库配置慢查询日志
给ElasticSearch引擎配置慢查询日志,可以实时监控搜索过慢的日志.虽然ElasticSearch以快速搜索而出名,但随着数据量的进一步增大或是服务器的一些性能问题,会有可能出现慢查询的情况. ...
- 使用VS code编写C++无法实时检测代码的解决办法
更新:其实微软是有官方文档配置VS code 的C++的.地址是: https://code.visualstudio.com/docs/cpp 更改工作区后就发现不能再使用VS CODE愉快地写C+ ...
- Java on Visual Studio Code的更新 – 2021年5月
杨尧今 from Microsoft VS Code Java Team 欢迎来到 5月的 VS Code for Java 更新.这次,我们将与您分享Java格式化设置编辑器和其他很酷的功能.开始吧 ...
- 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)
目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...
- alert日志报错:ERROR: failed to establish dependency between database RACDB and diskgroup resource ora.DATA.dg
一.打开数据库alert日志,发现有报错 ERROR: failed to establish dependency between database RACDB and diskgroup reso ...
- 一文带你走遍Git世界,教会你Git的使用
@ 目录 这篇文章教会Git 1. Git是什么? 1.1 发展历程 1.2 Git是什么? 1.3 Git和SVN 2.Git有什么用? 2.1 代码合并 2.2 代码备份 2.3 代码还原 2.4 ...
- C#WebApi的创建与发布
VS中新建项目-Web-ASP.NET Web应用程序 然后确定,选择空模版就可以了,勾上Webapi(也可以选择webapi模板,这样生成的文件比较多) 添加好之后Controllers和Model ...