主题链接:点击打开链接

意甲冠军:特定n*m矩阵

X代表色 .代表无色

随着x*y形刷子去涂色。

刷子每次能够→或↓移动随意步。

若可以染出给定的矩阵,则输出最小的刷子的面积

若不能输出-1

思路:

先找到连续最小的x,y

由于至少一个边界和x或y相等,所以枚举(x,i) 和 (i,y)就能够了。

#pragma comment(linker, "/STACK:102400000,102400000")
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
using namespace std;
#define N 1010
int top;
char s[N][N];
int n, m, stx, sty;
int H(int h, int l, int r){//扫一行 -1表示全是. 1表示全是X 0表示都有
if(h>n || r>m) return -2;
int cnt = 0;
for(int i = l; i <= r; i++)
if(s[h][i]=='X')cnt++;
if(cnt==0)return -1;
if(cnt==r-l+1)return 1;
return 0;
}
int L(int l, int S, int X){
if(l>m || X>n) return -2;
int cnt = 0;
for(int i = S; i <= X; i++)
if(s[i][l]=='X')cnt++;
if(cnt==0)return -1;
if(cnt==X-S+1)return 1;
return 0;
}
bool ok(int x, int y){
// printf(" ++++++(%d,%d)\n", x,y);
int nowx = stx, nowy = sty;
if(nowx + x-1 > n || nowy + y-1>m)return false;
for(int i = 0; i < x; i++)
for(int j = 0; j < y; j++)
if(s[i+nowx][j+nowy]!='X')return false;
// puts("---");put(); puts("-----");
int cnt = x*y;
while(1){
if(nowx + x <= n && s[nowx+x][nowy] =='X')
{
nowx ++;
for(int i = 0; i < y; i++)
if(s[nowx+x-1][i+nowy]!='X')
return false;
cnt += y;
}
else if(nowy + y <= m && s[nowx][nowy+y] == 'X')
{
nowy++;
for(int i = 0; i < x; i++)
if(s[i+nowx][nowy+y-1]!='X')
return false;
cnt += x;
}
else break;
// puts("******");put();
}
return cnt == top;
}
int hehe; int feifei;
int x, y;
void find_xy(){
x = N, y = N;
for(int i = 1; i <= m; i++) {
int cnt = 0;
for(int j = 1; j <= n; j++)
{
if(s[j][i]=='.')
{
if(cnt) x = min(x, cnt);
cnt = 0;
}
else
cnt++;
}
if(cnt) x = min(x, cnt);
}
for(int i = 1; i <= n; i++) {
int cnt = 0;
for(int j = 1; j <= m; j++)
{
if(s[i][j]=='.')
{
if(cnt) y = min(y, cnt);
cnt = 0;
}
else cnt++;
}
if(cnt) y = min(y, cnt);
}
}
int solve(){
int ans = N*N;
for(int i = 1; i <= x; i++)
if(ok(i,y)) {
ans = i*y;
break;
}
for(int i = 1; i <= y && x*i<ans; i++)
if(ok(x,i))
{
ans = x*i;
break;
}
if(ans > n*m) return -1;
return ans;
}
void input(){
stx = -1;
top = 0;
for(int i = 1; i <= n; i++)
{
scanf("%s", s[i]+1);
for(int j = 1; j <= m; j++) {
if(stx==-1 && s[i][j]=='X'){
stx = i, sty = j;
}
top += s[i][j]=='X';
}
}
}
int main(){
while(cin>>n>>m){
input();
find_xy();
printf("%d\n", solve());
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

Codeforces 475C Kamal-ol-molk&#39;s Painting 模拟的更多相关文章

  1. codeforces 373 A - Efim and Strange Grade(算数模拟)

    codeforces 373 A - Efim and Strange Grade(算数模拟) 原题:Efim and Strange Grade 题意:给出一个n位的实型数,你可以选择t次在任意位进 ...

  2. Codeforces Round #353 (Div. 2) B. Restoring Painting 水题

    B. Restoring Painting 题目连接: http://www.codeforces.com/contest/675/problem/B Description Vasya works ...

  3. codeforces 459D - Pashmak and Parmida&#39;s problem【离散化+处理+逆序对】

    题目:codeforces 459D - Pashmak and Parmida's problem 题意:给出n个数ai.然后定义f(l, r, x) 为ak = x,且l<=k<=r, ...

  4. Codeforce 475 C. Kamal-ol-molk&#39;s Painting

    从最左上的点開始枚举长宽.... C. Kamal-ol-molk's Painting time limit per test 2 seconds memory limit per test 256 ...

  5. Codeforces Round #461 (Div. 2) C. Cave Painting

    C. Cave Painting time limit per test 1 second memory limit per test 256 megabytes Problem Descriptio ...

  6. Codeforces Round #599 (Div. 1) A. Tile Painting 数论

    C. Tile Painting Ujan has been lazy lately, but now has decided to bring his yard to good shape. Fir ...

  7. CodeForces - 1245A Good ol' Numbers Coloring (思维)

    Codeforces Round #597 (Div. 2 Consider the set of all nonnegative integers: 0,1,2,-. Given two integ ...

  8. 爆搜 + 模拟 --- codeforces 475C

    Problem's Link:http://codeforces.com/problemset/problem/475/Chttp://codeforces.com/problemset/proble ...

  9. Codeforces Round #313 C. Gerald&#39;s Hexagon(放三角形)

    C. Gerald's Hexagon time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. EasyUI选项卡tab页面处理示例

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. linux shell命令行下操作mysql 删除mysql指定数据库下的所有表--亲测成功百分百测试通过--绝对可靠

    1,在shell提示符下查看mysql指定数据库下的表等数据

  3. OpenStack ceilometer部署安装监控,计费数据抓取测试Ok

  4. word2vec 入门基础(一)

    一.基本概念 word2vec是Google在2013年开源的一个工具,核心思想是将词表征映 射为对应的实数向量. 目前采用的模型有一下两种 CBOW(Continuous Bag-Of-Words, ...

  5. Android学习总结——获取被启动的Activity传回的数据

    当前Activity:包含一个Button和一个TextView,用于启动另一个Activity和显示传回的数据,这里重写了onActivityResult()方法. public class Mai ...

  6. Zipper

      Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  7. 启动Tomcat自动加载(运行)类

    其实这是紧跟着我上次写的java计时器Timer的,因为Timer的测试类写好后,不可能要通过什么东西去触发,对已经存在的时间点进行监控 所以,在启动项目是自动运行此类 方法如下: 一.在web.xm ...

  8. Cocos2d-x Render-NewCulling

    .cpp layout->setBackGroundImageScale9Enabled(true); layout->setBackGroundImage("green_edi ...

  9. 实用的JavaScript技巧、窍门和最佳实践

    JavaScript是世界上第一的编程语言,它是Web的语言,是移动混合应用(mobile hybrid apps)的语言(比如 PhoneGap或者 Appcelerator),是服务器端的语言(比 ...

  10. Asp.Net(C#) MD5 加密

    /// <summary> /// MD5 字符串加密  /// </summary> /// <param name="str">需要加密的字 ...