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 ...
随机推荐
- 利用"NOTIFYICONDATA"实现MFC的托盘程序
本文章为转发百度空间内容,,保存一下,以防以后用到.. 一.自定义信息 在头文件中加入下面这句话: #define WM_SHOWTASK (WM_USER+1) 二.MYDLG.CPP文件中添加_m ...
- Java并发编程:ThreadLocal
Java并发编程:深入剖析ThreadLocal Java并发编程:深入剖析ThreadLocal 想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用 ...
- awk--动作(action)
摘要 在awk--简述中我们讲到awk是由pattern-action组合而成的,关于pattern我们已经awk--模式(pattern)在讲述,接下来就来看下awk的action. 动作是什么 我 ...
- SOAP详解
1. SOAP简介 1.1应用背景 对于应用程序开发来说,使程序之间进行因特网通信是很重要的.目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 H ...
- shell脚本编写汇集
一.替换文本: ##1 sed -i 's/disabled=true/disabled=false/' /etc/fdfs/storage.conf ##2 sed -i 's/base_path= ...
- easyui 分页实现
1.用datagrid 做分页显示, 依据API样例,最终解决.废话不说,datagrid分页 有一个附加的分页控件 通过在datagrid中设置pagination:true 就会显示分页 当请求是 ...
- 获取CPU使用情况信息(转)
获取了内存使用情况,也可以使用PHP的 getrusage()获取CPU使用情况,该方法在windows下不可用. print_r(getrusage()); /* 输出 Array ( [ru ...
- Win32 WriteFile and ReadFile
HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, // 文件路径 __in DWORD dwDesiredAccess, // 访问权限,GENER ...
- mui实现自动登录
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta name= ...
- 组合控件 圆环 ring
使用 可以设置内部填充样式及大小 可以设置边框颜色及宽度 这里只是介绍了其中一种实现方式,其实这种类型的东西完全可以用自定义View去实现,他就是一个空中的大圆+一个空中或实心的小圆,实现起来也是非常 ...