Time Limit: 1 second

Memory Limit: 64 MB

【问题描述】

混乱的城市已经变得无法控制。大楼随处乱造,城市的布局也是一片混乱。市长决定要结束这种局面,兵器并且想建造一个漂亮的、有组织的城市。

通过一些研究,他找到了使这个成为现实的理想的方法。受到纽约曼哈顿的启发,他希望所有的房子都造在矩形的格子里,用南北向的林荫道和东西向的街道隔开。这些林荫道和街道都有相同的间距。

在现在这种状况,房子已经规划在矩形格子里面了。事实上,每幢房子都恰好完全覆盖住一个矩形格子。但是,所有的楼房随

机地散落在城市里,不毁坏房屋来造路是不可能的。为了使得更多的市民开心,市长想要毁坏尽量少的房子。给你当前的房屋建造

状况,最小破坏量是多少呢?



上图说明了这个问题。阴影方块是原先的楼房。如果道路间距为3,上面的粗线条就是规划的道路,被经过的那个楼房就要被拆除了。图对应样例

【输入格式】

输入文件的第一行为两个整数D和N,用一个空格隔开,分别代表道路间距、城市中的楼房数,1 <= D <= 1000, 1 <= N <= 100000。 以下N行,每行两个整数x和y,用一个空格隔开,代表房屋的位置。-109 <= x,y <= 109。

【输出格式】

输出文件只有一行一个整数,代表最少需要毁坏的房屋数。

【数据规模】

Sample Input1

3 10

1 0

2 0

3 0

4 0

1 2

0 3

1 5

3 5

4 2

-2 2

Sample Output1

1

【题目链接】:http://noi.qz5z.com/viewtask.asp?ID=u250

【题解】





可以看到我们只要在0..d-1(两个坐标轴都是)的范围内枚举道路放在哪里,其他地方的道路位置就确定了;

则我们把其他位置的房子,全部都放在0..d-1,0..d-1这个坐标范围里面就好了->用取余来替代这个移动的过程;

我们对输入的坐标直接取余->移动到那个最小的矩形区域里面;

然后heng[x]++,heng[y]++,x和y都对d取余过;

然后要记录g[x][y]++;(防止重复计数);

因为如果最后我们在枚举道路在这个最小矩形区域内的坐标(x,y)时(即划一条横线和一条竖线经过x,y,这两条道路由这个点确定出来了,其他的道路也就确定出来了,因为距离一样),但是可能g[x][y]不为0,也就是说那些从其他地方移动过来的点里面有存在于横道路和竖道路的交界处的房子,我们直接加上heng[x]+heng[y]的时候会把那些交界处的房子多算一次;则需要再减掉g[x][y];



【完整代码】

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second typedef pair<int,int> pii;
typedef pair<LL,LL> pll; void rel(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} void rei(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} const int MAXN = 1e3+10;
const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
const double pi = acos(-1.0); int d,n,heng[MAXN],zong[MAXN],g[MAXN][MAXN]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(d);rei(n);
rep1(i,1,n)
{
int x,y;
rei(x);rei(y);
x%=d,y%=d;
if (x<0) x+=d;
if (y<0) y+=d;
heng[x]++,zong[y]++;
g[x][y]++;
}
int ans = 1e5+10;
rep1(i,0,d-1)
rep1(j,0,d-1)
ans = min(ans,heng[i]+zong[j]-g[i][j]);
cout << ans << endl;
return 0;
}

【u250】manhattan的更多相关文章

  1. 【poj3133】 Manhattan Wiring

    http://poj.org/problem?id=3133 (题目链接) 题意 $n*m$的网格里有空格和障碍,还有两个$2$和两个$3$.要求把这两个$2$和两个$3$各用一条折线连起来.障碍里不 ...

  2. hihoCoder 1392 War Chess 【模拟】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

    #1392 : War Chess 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Rainbow loves to play kinds of War Chess gam ...

  3. 【数据挖掘】分类之kNN(转载)

    [数据挖掘]分类之kNN 1.算法简介 kNN的思想很简单:计算待分类的数据点与训练集所有样本点,取距离最近的k个样本:统计这k个样本的类别数量:根据多数表决方案,取数量最多的那一类作为待测样本的类别 ...

  4. 【转】R语言函数总结

    原博: R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头, ...

  5. 【LeetCode】1162. 地图分析 As Far from Land as Possible(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 这个题想考察什么? 剩下的任务就是套模板! 日期 题目 ...

  6. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  7. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  8. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  9. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

随机推荐

  1. C/C++(函数)

    函数 函数三要素:函数名,参数,返回值 重点研究函数的输入输出 随机数函数 //产生一组随机数 #include<stdio.h> #include<stdlib.h> #in ...

  2. 漫话Unity(二)

    三.Unity编辑器介绍 Unity是一个商业级的3d游戏引擎.一个引擎的专业程度事实上并非体如今它多么牛b 的次世代效果,说实话那些效果即便你会用也不敢用.由于没有哪个手机是次世代的. 游戏引擎的专 ...

  3. 华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root

    华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery  及 root 下载地址    http://pan.baidu.com/s/1hsn6VzA 1. 在官网申请解锁码    申 ...

  4. ::的类名前有个 & ,什么意思?

    转载自  http://www.imooc.com/qadetail/93985 MazePerson &MazePerson::setPersonPosition(int coordinat ...

  5. HTML5的设计目的是为了在移动设备上支持多媒体

    HTML5的设计目的是为了在移动设备上支持多媒体

  6. js-轮播图的总结

    /*两种播放行为:(一种自动播放,一种控制播放),一个定时器控制. *一个定时器控制两种播放状态. * 布局说明:装图片的盒子足够宽,让图片左浮,排成一排,最后一张重新放置第一张. * 定时器里执行自 ...

  7. Linux shell command学习笔记(一)

    Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell.在现在的大多数Linux发行版中,默认的Shell一般都是Bourne again shell(bash). &l ...

  8. android通用JSON解析

    ackage cn.com.pcgroup.<a href="http://lib.csdn.net/base/15" class="replace_word&qu ...

  9. amazeui学习笔记一(开始使用4)--Web App 相关

    amazeui学习笔记一(开始使用4)--Web App 相关 一.总结 1.桌面图标(Touch icon)解决方案:终极方案:link标签的rel和href属性: <link rel=&qu ...

  10. 24. Spring Boot 事务的使用

    转自:https://blog.csdn.net/catoop/article/details/50595702