NBUT 1618 投放炸弹(树状数组)
[1618] 投放炸弹
- 时间限制: 1000 ms 内存限制: 65535 K
- 问题描述
- 我们定义一个炸弹能炸毁的地方要求曼哈顿距离小于等于某个值。
曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。-来自百度百科
现在给出一个n*m的平面图,'.'表示无人区,'*'表示居民区。炸弹只能投放在无人区,炸弹能炸毁曼哈顿距离小于等于x的所有居民区,现在你要来投放这个炸弹,请输出炸弹最多能炸毁的居民区个数。 - 输入
- 多组输入,每组第一行n,m,x。
接下来输入n行,每行m个字符,字符只有'.'和'*'。
数据范围:1<=n,m<=200,1<=x<=1e9 - 输出
- 每组输出一行,最多可以炸毁的居民区个数。
- 样例输入
4 5 1
..*..
**.**
..*..
.....
2 3 4
***
***- 样例输出
4
0
题目链接:NBUT 1618
大一那会儿留下来的题目,最近想学KDtree突然想起来这题……很那啥的一道题,佩服作者的YY能力,实际上题目中炸弹范围是一个菱形,如果忽略地图边界,还是一个完全对称的菱形,DFS的话T了很多发,这题如果仔细想想是可以用二维树状数组做的,T[i][j]维护第i行前j个格子中含有居民点的前缀和,菱形内的居民区个数可以从上到下一行一行地求出来,当然这题有个小坑就是范围可以很大,那么根据题目实际地图大小缩小到实际可以使用的范围就好了。求和的时候个别边界出现负数处理一下即可
代码:
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <sstream>
#include <numeric>
#include <cstring>
#include <bitset>
#include <string>
#include <deque>
#include <stack>
#include <cmath>
#include <queue>
#include <set>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
#define LC(x) (x<<1)
#define RC(x) ((x<<1)+1)
#define MID(x,y) ((x+y)>>1)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
typedef pair<int, int> pii;
typedef long long LL;
const double PI = acos(-1.0);
const int N = 210;
int T[N][N];
char s[N][N];
int n, m; void init()
{
CLR(T, 0);
}
void add(int h, int k, int v)
{
while (k < N)
{
T[h][k] += v;
k += (k & -k);
}
}
int getsum(int h, int k)
{
if (k <= 0)
return 0;
int ret = 0;
if (k > m)
k = m;
while (k)
{
ret += T[h][k];
k -= (k & -k);
}
return ret;
}
int main(void)
{
int k, i, j;
while (~scanf("%d%d%d", &n, &m, &k))
{
init();
for (i = 1; i <= n; ++i)
{
scanf("%s", s[i] + 1);
for (j = 1; j <= m; ++j)
{
if (s[i][j] == '*')
add(i, j, 1);
}
}
int ans = 0;
k = min(k, max(n, m));
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= m; ++j)
{
if (s[i][j] == '.')
{
int temp = getsum(i, j + k) - getsum(i, j - k - 1);
for (int kk = 1; kk <= k; ++kk)
{
int up = i - kk, down = i + kk;
if (up >= 1)
temp += getsum(up, j + k - kk) - getsum(up, j - k - 1 + kk);
if (down <= n)
temp += getsum(down, j + k - kk) - getsum(down, j - k - 1 + kk);
}
if (temp > ans)
ans = temp;
}
}
}
printf("%d\n", ans);
}
return 0;
}
NBUT 1618 投放炸弹(树状数组)的更多相关文章
- TOJ 4105 Lines Counting(离线树状数组)
4105. Lines Counting Time Limit: 2.0 Seconds Memory Limit: 150000K Total Runs: 152 Accepted Ru ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- bzoj1878--离线+树状数组
这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...
- codeforces 597C C. Subsequences(dp+树状数组)
题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
- 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序
3881: [Coci2015]Divljak Time Limit: 20 Sec Memory Limit: 768 MBSubmit: 508 Solved: 158[Submit][Sta ...
随机推荐
- java设计模式——抽象工程模式
一. 定义与类型 定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类 类型:创建型 二. 适用场景 客户端不依赖于产品类实例如何备创建,实现等细节 创建一系列相关的产品 ...
- Bootstrap历练实例:响应式标签页
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 基于 Nginx && Lua 的简易CC防护方案
零.前言 1.CC攻击简述 CC攻击(Challenge Collapsar)是常见网站应用层攻击的一种,目的是消耗服务器资源,降低业务响应效率:极端情况会让站点无法正常提供服务: 2.本文要点 旨在 ...
- 2018.11.7 Nescafe29 T1 穿越七色虹
题目 题目背景 在 Nescafe27 和 28 中,讲述了一支探险队前往 Nescafe 之塔探险的故事…… 当两位探险队员以最快的时间把礼物放到每个木箱里之后,精灵们变身为一缕缕金带似的光,簇簇光 ...
- 【Django】Django中的模糊查询以及Q对象的简单使用
Django中的模糊查询: 需要做一个查找的功能,所以需要使用到模糊查询. 使用方法是:字段名加上双下划线跟上contains或者icontains,icontains和contains表示是否区分大 ...
- 使用IP访问本地网站缓慢解决方法
运行环境: win7 64位 apache2.4 php-5.6.37 最近由于业务需要,需要使用php5.6版本,所以配套升级了apache到2.4,但升级以后,发现用公司内网IP访问网站非常非常慢 ...
- python 斗图图片爬虫
捣鼓了三小时,有一些小Bug,望大佬指导 废话不说,直接上代码: #!/usr/bin/python3 # -*- coding:UTF-8 -*- import os,re,requests fro ...
- hihocoder#1098 : 最小生成树二·Kruscal算法
#1098 : 最小生成树二·Kruscal算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用 ...
- 【IPv6】ISATAP隧道技术详解
一.基本概念 ISATAP(Intra-SiteAutomatic Tunnel Addressing Protocol) ISATAP是一种非常容易部署和使用的IPv6过渡机制.在 ...
- NOS直传加速服务
本文来自网易云社区 作者:孙建良 最近团队在对存储系统做一些性能测试,期间遇到了不少问题,测试过程中得出的结果也没有很好的数据支撑,所以尝试了非常多的方法来对性能问题进行定位. 小王童鞋是挺厉害的,使 ...