土豪聪要请客

试题描述
众所周知,聪哥(ndsf)是个土豪,不过你们不知道的是他的MZ和他的RMB一样滴多……
某天土豪聪又赚了10^10000e的RMB,他比较开心,于是准备请客。他在自己在XX星上的别墅里面大摆酒席,想要邀请尽可能多的MZ来参加他的宴会。他将会同MZ一起坐在一个巨大的长方形桌子上。这个桌子能坐下的人数等于他的边长。聪哥要求他的桌子能够放进他的别墅,并且桌子的边必须与别墅的边界平行。给定别墅的平面图,请你求出聪哥最多可以请多少个MZ。
输入
第一行n,m。表示别墅的长宽
下面n行,每行m个字符,表示一个方块是空的(‘.’)或是被占用了(‘X’)。
聪哥只要他的桌子放在别墅里,并且桌子不能占用任何一个已经占用了的方块。
输出
一个数,表示聪哥最多可以请几个Maze。
输入示例1

2 2
..
..

输出示例1

7

输入示例2

4 5
..X..
.X...
X....
.....

输出示例2

11

上一题是CZY的MZ,这题变成聪哥的了……

先明确一下题意,智商捉急的我看了半天样例才理解:地图中选一个周长最大的只包含字符‘.’的矩形,使矩形周长最大,答案是这个最大的周长-1.

我的思路是这样的:枚举上下边界,于是可以把二维的地图压缩成一维的(只要当前列有障碍物X就压成一个‘X’,没有就压成一个‘.’,如样例2地图中,当前枚举到2~4行,那么压缩后的地图变为“XX...”)。压缩成一维后,问题转化为“在一个只包含字符X和字符.的字符串中,选一个尽量长的只包含字符‘.’的连续子串”,因为是连续的,左右端点构成一个滑动窗口,可以用“尺取法”(个人习惯的叫法,详见代码)解决。



#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <cstring>
#include <string>
#include <map>
#include <set>
using namespace std;int read() {int x = 0, f = 1; char c = getchar();while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }return x * f;
}#define maxn 410
#define INF 1073741823
int n, m, l, r, ans, S[maxn][maxn];
char Map[maxn][maxn];
bool can[maxn];int main() {n = read(); m = read();for(int i = 1; i <= n; i++) scanf("%s", Map[i] + 1);for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)S[i][j] = S[i-1][j] + (Map[i][j] == 'X');for(int i = 1; i <= n; i++)for(int j = i; j <= n; j++) {memset(can, 0, sizeof(can));for(int k = 1; k <= m; k++) can[k] = !(S[j][k] - S[i-1][k]);l = 1; int tmp = -INF;for(r = 1; r <= m; r++) if(!can[r]) l = r + 1;else tmp = max(tmp, r - l + 1);ans = max(ans, (tmp + j - i + 1 << 1) - 1);}printf("%d\n", ans);return 0;
}

转载于:https://www.cnblogs.com/xiao-ju-ruo-xjr/p/4926194.html

土豪聪要请客(题解)相关推荐

  1. 土豪聪要请客(stol)

    土豪聪要请客(stol) 众所周知,聪哥(ndsf)是个土豪,不过你们不知道的是他的MZ和他的RMB一样滴多-- 某天土豪聪又赚了10^10000e的RMB,他比较开心,于是准备请客.他在自己在XX星 ...

  2. 【19/04/18 膜赛】土豪聪要请客(stol)

    题目: 题目描述 众所周知,聪哥(ndsf)是个土豪,不过你们不知道的是他的MZ和他的RMB一样滴多-- 某天土豪聪又赚了10^10000e的RMB,他比较开心,于是准备请客.他在自己在XX星上的别墅 ...

  3. NOI 2005 聪聪与可可 题解

    题目传送门 题目大意: 给出一张无向图,起点终点为 S,TS,TS,T,聪聪站在起点,可可站在终点,可可每回合随机走 111 步,也可能不动,聪聪则会每回合沿最短路向他走两步,每回合聪聪先走,问聪聪期 ...

  4. cogs 2320. [HZOI 2015]聪聪的世界题解

    2320. [HZOI 2015]聪聪的世界 时间限制:6 s   内存限制:512 MB [题目描述] 背景: 聪聪的性取向有问题. 题目描述: 聪聪遇到了一个难题: 给出一个序列a1-an,完成以 ...

  5. 题解:luogu P2634 [国家集训队]聪聪可可

    题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...

  6. BZOJ2152 聪聪可可 点分治题解

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好 ...

  7. 题解报告——聪聪与可可

    题目传送门 题目描述 在一个魔法森林里,住着一只聪明的小猫聪聪和一只可爱的小老鼠可可.虽 然灰姑娘非常喜欢她们俩,但是,聪聪终究是一只猫,而可可终究是一只老鼠, 同样不变的是,聪聪成天想着要吃掉可可. ...

  8. [题解]bzoj2152 聪聪可可

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好 ...

  9. 【题解】bzoj-1415 NOI-2005 聪聪与可可

    Problem Luogu&bzoj Solution 这题一看就联想起了HNOI游走那道题,仔细一看发现不对 发现这题的转移是有终点的,所以可以用Dp,加上题目是一张图,推荐用记忆化搜索 显 ...

最新文章

  1. 自从学了这套框架,自动化+性能都解决了
  2. 阴阳师人数最多的服务器,《阴阳师》手游部分服务器合并公告
  3. 写让别人能读懂的代码
  4. c语言制作贪吃小白入门,小白入门——easyx界面版“贪吃蛇”的C语言实现(详细)...
  5. 解决vi/vim中粘贴会在行首多很多缩进和空格的问题
  6. angular读取html文件路径,angular中关于路径问题的详解
  7. SharePoint2010内容类型剖析(三)
  8. android自定义软键盘
  9. 基于SpringBoot/SSM的旅游论坛
  10. python像数常用函数_八卦象数疗法常见配方
  11. 我的梦想是成为一名计算机程序员英语怎么说,英语作文。我的梦想、我的梦想是成为电脑程序员。。80词...
  12. IDEA中TODO的使用、配置和设置TODO过滤器
  13. 太阳能电池基本特性实验报告_太阳能电池基本特性研究实验报告
  14. 蓝桥杯练习——摔手机测试次数
  15. 如何为firefox安装视频播放器
  16. 笔记本计算机风扇声音大怎么办,怎么解决笔记本风扇声音大 笔记本风扇声音大解决办法【图文】...
  17. spring @Value 的取值顺序 优先级
  18. 【Lesson 6】 add2和弦
  19. 利用DSF深度优先搜索来解容器倒水问题
  20. 简易五子棋游戏(控制台版)

热门文章

  1. 【python】直方图均衡化和自适应均衡化图像
  2. tab weui 页面切换_weui tabbar 到底怎么用啊?tab页面为什么不能切换?
  3. C++输出倒三角加数字
  4. 多精度数带余除法_《有余数的除法》教学设计
  5. 知识图谱组队学习Task05——图数据库查询
  6. EasyBert,基于Pytorch的Bert应用
  7. 操作系统源代码_计算机自制操作系统(八):仿生DOS操作系统源代码
  8. 核磁谱图分析步骤_质谱仪、红外光谱、核磁共振氢谱
  9. mysql学习day03——02
  10. java 命令行 读取文件_java – 将文件作为命令行参数传递并读取其行