Codeforces 475C Kamal-ol-molk's Painting 模拟
主题链接:点击打开链接
意甲冠军:特定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's Painting 模拟的更多相关文章
- codeforces 373 A - Efim and Strange Grade(算数模拟)
codeforces 373 A - Efim and Strange Grade(算数模拟) 原题:Efim and Strange Grade 题意:给出一个n位的实型数,你可以选择t次在任意位进 ...
- Codeforces Round #353 (Div. 2) B. Restoring Painting 水题
B. Restoring Painting 题目连接: http://www.codeforces.com/contest/675/problem/B Description Vasya works ...
- codeforces 459D - Pashmak and Parmida's problem【离散化+处理+逆序对】
题目:codeforces 459D - Pashmak and Parmida's problem 题意:给出n个数ai.然后定义f(l, r, x) 为ak = x,且l<=k<=r, ...
- Codeforce 475 C. Kamal-ol-molk's Painting
从最左上的点開始枚举长宽.... C. Kamal-ol-molk's Painting time limit per test 2 seconds memory limit per test 256 ...
- 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 ...
- 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 ...
- CodeForces - 1245A Good ol' Numbers Coloring (思维)
Codeforces Round #597 (Div. 2 Consider the set of all nonnegative integers: 0,1,2,-. Given two integ ...
- 爆搜 + 模拟 --- codeforces 475C
Problem's Link:http://codeforces.com/problemset/problem/475/Chttp://codeforces.com/problemset/proble ...
- Codeforces Round #313 C. Gerald's Hexagon(放三角形)
C. Gerald's Hexagon time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
随机推荐
- c# excel sheep 导出
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Da ...
- leetcode Permutation
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- HTML5开发 BUG解决
1.点透Q:元素A上定位另外一个元素B,点击元素B,如果元素A有事件或链接,会触发元素A上的事件或链接,即点透A:在元素B的touchend中增加ev.preventDefault();阻止默认事件即 ...
- (转)js prototype 详解
转载自:http://blog.csdn.net/chaojie2009/article/details/6719353(也是转载的.鄙视一下此人转载不著名出处.) 注意:必须带着怀疑的态度去看这篇文 ...
- ASP.NET中的路径(path) 详解
一 ASP.NET常用路径(path)获取方法与格式对照表 假设我们的网址为http://localhost:1897/ News/Press/Content.aspx?id=1019 跟 Brows ...
- hibernate-annotation CascadeType.PERSIST不起作用的解决方法
有如下两个实体类 , Student和Grade 为多对一关系. Student.java @Entity public class Student { private Integer id; pri ...
- Spark Streaming 实现读取Kafka 生产数据
在kafka 目录下执行生产消息命令: ./kafka-console-producer --broker-list nodexx:9092 --topic 201609 在spark bin 目 ...
- 如何将java web项目上线/部署到公网
关于如何将java web上线,部署到公网,让全世界的人都可以访问的问题. 1.在myeclipse中开发好项目,打包成war格式,不会的同学参考以下 http://zhidao.baidu.com/ ...
- Search in Sorted Array,Search in Rotated Sorted Array,Search in Rotated Sorted ArrayII
一:Search in Sorted Array 二分查找,可有重复元素,返回target所在的位置,只需返回其中一个位置,代码中的查找范围为[low,high),左闭右开,否则容易照成死循环. 代码 ...
- 获取ajax对象
function ajaxFunction(){ var xmlHttp; try{ // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest ...