【u250】manhattan
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的更多相关文章
- 【poj3133】 Manhattan Wiring
http://poj.org/problem?id=3133 (题目链接) 题意 $n*m$的网格里有空格和障碍,还有两个$2$和两个$3$.要求把这两个$2$和两个$3$各用一条折线连起来.障碍里不 ...
- hihoCoder 1392 War Chess 【模拟】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)
#1392 : War Chess 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Rainbow loves to play kinds of War Chess gam ...
- 【数据挖掘】分类之kNN(转载)
[数据挖掘]分类之kNN 1.算法简介 kNN的思想很简单:计算待分类的数据点与训练集所有样本点,取距离最近的k个样本:统计这k个样本的类别数量:根据多数表决方案,取数量最多的那一类作为待测样本的类别 ...
- 【转】R语言函数总结
原博: R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头, ...
- 【LeetCode】1162. 地图分析 As Far from Land as Possible(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 这个题想考察什么? 剩下的任务就是套模板! 日期 题目 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
随机推荐
- 【Django】序列化
Django中序列化主要应用于将数据库中检索的数据返回给客户端用户,特别是Ajax请求一般返回为Json格式. * 1.from django.core import serializers** fr ...
- git把本地文件上传到github上的步骤
1.清除clean 2.返回上一级cd .. 3.克隆仓库地址git clone+地址 4.添加忽悠文件vim .gitignore 5查看cat .gitignore 6.进入到test,并且添加所 ...
- JavaScript学习总结(11)——JS常用函数(二)
37. getElementsByClassName ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getElementsByClassName( ...
- 洛谷 P2105 K皇后
P2105 K皇后 题目描述 小Z最近捡到了一个棋盘,他想在棋盘上摆放K个皇后.他想知道在他摆完这K个皇后之后,棋盘上还有多少了格子是不会被攻击到的. (Ps:一个皇后会攻击到这个皇后所在的那一行,那 ...
- Oracle数据库安装时 environment variable path 大于 1023
提示的内容如下: 打开系统的环境变量设置, 编辑Path,全选将其中的路径全部复制出来放到文本文档中.新建一个系统变量取名Path_Old_1,剪切Path中的所有变量复制进path1然后保存,将Pa ...
- 自己定义控件的onMeasure方法具体解释
在我们自己定义控件的时候可能你会用到onMeasure方法,以下就具体的给大家介绍一下这种方法: @Override protected void onMeasure(int widthMeasure ...
- IIS6下AD域设置
简介:IIS6下AD域设置 IIS6下AD域设置 http://files.cnblogs.com/files/KingUp/AD%E5%9F%9F%E8%AE%BE%E7%BD%AE.rar
- C++ 复制到粘贴板
网上好多教程讲如何复制到剪切板,但是有可能复制的是乱码,为了方便,将CString类型的复制到剪切板 CString source;if (OpenClipboard()){//防止非ASCII语言复 ...
- 洛谷 P2347 砝码称重
P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...
- html中的瀑布流是什么
html中的瀑布流是什么 一.总结 1.瀑布流: 从左往右排列,哪一列现在的总高度最小,就优先排序把item(单元格)放在这一列.这样排完所有的单元格后,可以保证每一列的总高度都相差不大 2.看效果图 ...