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的更多相关文章

  1. CF 24 D. Broken robot

    D. Broken robot 链接. 题意: 一个方格,从(x,y)出发,等价的概率向下,向左,向右,不动.如果在左右边缘上,那么等价的概率不动,向右/左,向下.走到最后一行即结束.求期望结束的步数 ...

  2. CF 258 D. Little Elephant and Broken Sorting

    D. Little Elephant and Broken Sorting 链接 题意: 长度为n的序列,m次操作,每次交换两个位置,每次操作的概率为$\frac{1}{2}$,求m此操作后逆序对的期 ...

  3. CF 16C. Monitor

    题目链接 水题依旧无法1Y. #include <cstdio> #include <iostream> #include <cmath> using namesp ...

  4. Codeforces 846D Monitor(简单二分+二维BIT)

    D. Monitor time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  5. 11g新特性:Health Monitor Checks

    一.什么是Health Monitor ChecksHealth Monitor Checks能够发现文件损坏,物理.逻辑块损坏,undo.redo损坏,数据字典损坏等等.Health Monitor ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. [转载]监控 Linux 性能的 18 个命令行工具

    转自:http://www.kuqin.com/shuoit/20140219/338066.html 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一 ...

  2. XSLT学习

    XSL 语言 XSL(eXtensible Stylesheet Language)是可扩展样式表语言,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言. XSL与xml CSS ...

  3. JDBC batch批处理Statement executeBatch 具体解释

    JDBC提供了数据库batch处理的能力,在数据大批量操作(新增.删除等)的情况下能够大幅度提升系统的性能.我曾经接触的一个项目,在没有採用batch处理时,删除5万条数据大概要半个小时左右,后来对系 ...

  4. 基础-ADO插入数据后返回自增ID @@IDENTITY

    在文件上传中,没上传一个文件都会插入一条数据信息,那么就要返回插入的数据的id,以便进行真实删除操作.以下是ADO操作数据库的返回方法: string sql = string.Format(@&qu ...

  5. LINUX更改时区和时间

    因为公司运营海外游戏,服务器也多数放在国外,有时候要求服务器时区和时间要与所服务的地区一致,这里就涉及到更改服务器时区和时间的问题: 下面以一台在美国的服务器为例,我们的IDC提供商是一家德国公司,服 ...

  6. Jenkins api java 调用

    String filepath = "E:\\config.xml"; HttpClient client = new DefaultHttpClient(); HttpPost ...

  7. mysql source命令导入sql文件效率分析和索引整理

    Query OK, 24918 rows affected (0.90 sec)Records: 24918  Duplicates: 0  Warnings: 0 Query OK, 24923 r ...

  8. 匹配不含有某个信息的sql语句写法

    SELECT id,order_id,flight_info FROM order_flights WHERE mark=0 AND flight_info REGEXP '[^() DAY)]' O ...

  9. linux的colrm命令

    http://book.51cto.com/art/201107/277853.htm http://book.51cto.com/art/201107/277854.htm

  10. Dragger简介

    转自:http://www.apkbus.com/blog-705730-60435.html 什么是依赖注入 如果我们想要注入依赖,首先要理解依赖是什么.简单的说,依赖是我们代码中两个模块之间的耦合 ...