cf D. Broken Monitor
http://codeforces.com/contest/370/problem/D
题意:输入一张图,上面只有两个字符'w'和‘.’ ,如果可以用一个正方形把所有的‘w’围起来,所有的‘w’都在正方形的边上。如果有多种输出最小的一个。
先预处理出[1,1]到[i,j]里面有多少个'w'存在dp[i][j]中。找到正方形的大小,然后枚举找左上角的点。就可以找到符合题意的正方形。
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 2001
using namespace std; char g[maxn][maxn];
int dp[maxn][maxn];
int n,m; int get_num(int x1,int y1,int x2,int y2)
{
if(x1>x2||y1>y2) return ;
return dp[x2][y2]-dp[x2][y1-]-dp[x1-][y2]+dp[x1-][y1-];
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
int max1=,max2=,min1=n,min2=m;
int cnt=;
for(int i=; i<=n; i++)
{
scanf("%s",g[i]+);
for(int j=; j<=m; j++)
{
if(g[i][j]=='w')
{
cnt++;
min1=min(min1,i);
min2=min(min2,j);
max1=max(max1,i);
max2=max(max2,j);
}
}
}
bool flag=false;
for(int i=min1+; i<max1; i++)
{
for(int j=min2+; j<max2; j++)
{
if(g[i][j]=='w')
{
flag=true;
break;
}
}
if(flag) break;
}
if(flag)
{
printf("-1\n");
}
else
{
int x1,y1;
bool flag1=false;
int dx=max1-min1+;
int dy=max2-min2+;
int size=max(dx,dy);
for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++)
{
dp[i][j]=dp[i][j-]+dp[i-][j]-dp[i-][j-];
if(g[i][j]=='w')
{
dp[i][j]+=;
}
}
}
for(int i=; i<=n; i++)
{
if(i+size->n)break;
for(int j=; j<=m; j++)
{
if(j+size->m) break;
if(cnt==get_num(i,j,i+size-,j+size-)-get_num(i+,j+,i+size-,j+size-))
{
x1=i;
y1=j;
flag1=true;
break;
}
}
if(flag1) break;
}
if(flag1)
{
for(int i=x1; i<x1+size; i++)
{
for(int j=y1; j<y1+size; j++)
{
if((g[i][j]=='.'&&i==x1)||(g[i][j]=='.'&&j==y1)||(g[i][j]=='.'&&i==x1+size-)||(g[i][j]=='.'&&j==y1+size-)) g[i][j]='+';
}
}
for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++)
{
printf("%c",g[i][j]);
}
printf("\n");
}
}
else
{
printf("-1\n");
}
}
}
return ;
}
cf D. Broken Monitor的更多相关文章
- CF 24 D. Broken robot
D. Broken robot 链接. 题意: 一个方格,从(x,y)出发,等价的概率向下,向左,向右,不动.如果在左右边缘上,那么等价的概率不动,向右/左,向下.走到最后一行即结束.求期望结束的步数 ...
- CF 258 D. Little Elephant and Broken Sorting
D. Little Elephant and Broken Sorting 链接 题意: 长度为n的序列,m次操作,每次交换两个位置,每次操作的概率为$\frac{1}{2}$,求m此操作后逆序对的期 ...
- CF 16C. Monitor
题目链接 水题依旧无法1Y. #include <cstdio> #include <iostream> #include <cmath> using namesp ...
- Codeforces 846D Monitor(简单二分+二维BIT)
D. Monitor time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- 11g新特性:Health Monitor Checks
一.什么是Health Monitor ChecksHealth Monitor Checks能够发现文件损坏,物理.逻辑块损坏,undo.redo损坏,数据字典损坏等等.Health Monitor ...
- B - Broken Keyboard (a.k.a. Beiju Text)
Problem B Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well ...
- uva - Broken Keyboard (a.k.a. Beiju Text)(链表)
11988 - Broken Keyboard (a.k.a. Beiju Text) You’re typing a long text with a broken keyboard. Well i ...
- B - Broken Keyboard (a.k.a. Beiju Text) 数组模拟链表
You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...
- Broken Keyboard (a.k.a. Beiju Text) 思路
问题:You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problem ...
随机推荐
- 尚学堂 JAVA Day1 概念总结
1.什么是计算机语言?一些符号,这些符号按照计算机硬件结构可以理解的方式排列组合,方便人与计算机,计算机与计算机之间进行信息的交换. 2.什么是机器语言?就是简单的二进制0和1的组合.该语言是计算机硬 ...
- UINavigationController 导航控制器 ,根据文档写的一些东西
今天讲了导航控制器UINavigationController 和标签栏视图控制器UITabBarController 先来说一说导航视图控制器 UINavigationController 导航控 ...
- git commit error about 'vi'
error: There was a problem with the editor 'vi'. Please supply the message using either -m or -F opt ...
- IBinder对象在进程间传递的形式(一)
命题 当service经常被远程调用时,我们经常常使用到aidl来定一个接口供service和client来使用,这个事实上就是使用Binder机制的IPC通信.当client bind servic ...
- 神经网络和BP算法推导
注意:绘画太难了,因为他们画,本文中的所有插图来自基本算法饺子机类.请勿转载 1.习模型: 事实上,基本上全部的基本机器学习模型都能够概括为下面的特征:依据某个函数,将输入计算并输出. 图形化表示为下 ...
- C:应用于字符串处理函数
出于对C的不够熟悉,在读代码的过程中,平凡出现的字符串处理函数,成为了一个理解代码的大问题. 为了更方便的读取和理解代码,特意将接触到的字符串处理函数列出,方便查询: 1.strstr(str1,st ...
- python面对对象编程------3:写集合类的三种方法
写一个集合类的三种方法:wrap,extend,invent 一:包装一个集合类 class Deck: def __init__( self ): self._cards = [card6(r+1, ...
- asp.net 连接oracle,报错误“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
1.http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 下载对用版本的Instan ...
- Ext江湖笔记:JavaScript基本知识点
1.基本对象:Number,String,Date,Array,Error,RegExp,Math,Boolean ps:本人基本使用java写代码,常常写出Number n = new Number ...
- Objective-C学习篇07—NSArray与NSMutableArray
大纲 NSArray NSMutableArray 快速枚举 NSArray NSArray是一个静态数组,也就是一个不可变数组,一旦创建以后,就不能进行添加,删除或者修改其中的元素.NSArray继 ...