【CF1015E】Stars Drawing(贪心)
题意:给定一个n×m大小的字符矩阵,仅由‘.’和‘*’组成,询问这个图可否划分为一些由‘*’组成的十字形状,这些十字之间可以有重叠,
如果存在方案则输出每个十字中心坐标与边长度,无解输出-1
n,m<=1e3
思路:感觉挺独特的一个思路,并没有能力完全自主推导,还是翻译一下题解……
因为任意一组方案都可以,所以可以把每一个能放星星的地方都扩展到最大
预处理每个点上下左右能扩展的长度,四个长度取min再-1就是半径,则将这个十字中所有的方格+1
对于每一行和每一列做一下差分后的前缀和,如果某个"*"的行列前缀和至少一个大于0则能放星星(并不理解)
若存在格子"*"的行列前缀和皆为0则无解
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 1100
#define oo 10000000 int f[N][N][],sx[N][N],sy[N][N],x[N*N],y[N*N],z[N*N];
char a[N][N]; int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%s",a[i]+);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(a[i][j]=='*')
{
f[i][j][]=f[i-][j][]+;
f[i][j][]=f[i][j-][]+;
}
for(int i=n;i>=;i--)
for(int j=m;j>=;j--)
if(a[i][j]=='*')
{
f[i][j][]=f[i+][j][]+;
f[i][j][]=f[i][j+][]+;
}
int cnt=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(a[i][j]=='*')
{
int t=oo;
for(int k=;k<=;k++) t=min(t,f[i][j][k]);
if(t>)
{
x[++cnt]=i; y[cnt]=j; z[cnt]=t-;
sx[i-t+][j]++; sx[i+t][j]--;
sy[i][j-t+]++; sy[i][j+t]--;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
sx[i][j]+=sx[i-][j];
sy[i][j]+=sy[i][j-];
}
int flag=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(a[i][j]=='*'&&sx[i][j]==&&sy[i][j]==) flag=;
if(flag) printf("-1\n");
else
{
printf("%d\n",cnt);
for(int i=;i<=cnt;i++) printf("%d %d %d\n",x[i],y[i],z[i]);
}
return ;
}
【CF1015E】Stars Drawing(贪心)的更多相关文章
- CF 。E2. Stars Drawing (Hard Edition) (DP)
Description: 定义一个星星由 '*' 组成,形状为一个对称的“十”字型,大小为星星 1/2 的横长(或纵长)减一(如题目中的图).给出一个 n*m 的图,判断是不是每一个 '*' 都能属于 ...
- Codeforces 1015E1 Stars Drawing (Easy Edition)
题面: 传送门 题目描述: 要求用十字星星来画题目给出的"星"图.如果不能用十字星星来画"星"图,输出-1:如果能,则输出要在图的哪个位置画相应大小的十字星图. ...
- Codeforces Div3 #501 A-E(2) F以后补
感觉自己有点强迫症 不都写出来就找理由不写题解 http://codeforces.com/contest/1015 题目链接 A. Points in Segments 题目意思 n个线段 ...
- codeforces 1015E1&&E2
E1. Stars Drawing (Easy Edition) time limit per test 3 seconds memory limit per test 256 megabytes i ...
- Codeforces Round #501 (Div. 3)
A - Points in Segments 题意:implement #include<bits/stdc++.h> using namespace std; typedef long ...
- Java基础之在窗口中绘图——填充星型(StarApplet 2 filled stars)
Applet程序. import javax.swing.*; import java.awt.*; import java.awt.geom.GeneralPath; @SuppressWarnin ...
- HDOJ 5073 Galaxy 数学 贪心
贪心: 保存连续的n-k个数,求最小的一段方差... .预处理O1算期望. .. Galaxy Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- [译]如何在.NET Core中使用System.Drawing?
你大概知道System.Drawing,它是一个执行图形相关任务的流行的API,同时它也不属于.NET Core的一部分.最初是把.NET Core作为云端框架设计的,它不包含非云端相关API.另一方 ...
- 【贪心科技】贪心科技内容合伙人关于AI公司及创业的演讲笔记
贪心科技内容合伙人关于AI公司及创业的演讲笔记 视频 目录 一.投资角度对 AI 的两个基本认知 二.简单分析 AI 公司的两个纬度四个层面 三.AI 垂直行业应用的三点中美对比 四.给创业者的四个建 ...
随机推荐
- PAT 乙级 1044
题目 题目地址:PAT 乙级 1044 思路 简单的进制转化问题,根据题意进行相应的进制转化即可,因为题目已经划定了数据的求解范围,甚至连进制转化中的循环都不需要,进行简单计算就可以得出结果: 但本题 ...
- PAM认证机制
PAM:Pluggable Authentication Modules 认证库:文本文件,MySQL,NIS,LDAP等 Sun公司于1995 年开发的一种与认证相关的通用框架机制 PAM 是关注如 ...
- MySQL数据库的下载安装
目录 一.概述 二.MySQL安装 三.安装成功验证 四.NavicatforMySQL下载及使用 一.MySQL下载 MySQL版本:5.7.17 下载地址:https://dev.mysql.co ...
- CentOS6.7下的软件安装
一.JDK安装及其环境变量的配置 **创建一个专门安装软件的文件夹:mkdir /root/apps **解压安装包:tar -zxvf jdk-7u45-linux-x64.tar.gz -C /r ...
- Python中的set
set_lst = [ ('集合容器不可哈希',), ('集合中的元素必须可哈希',), ('集合是无序的',), ('集合自动去重',), ('增',), ('删',), ('查',), ('集合运 ...
- Storm: 遇到问题总结
1.没有ack : kafkaspout id 重复导致每次读最新没有数据. 2.由于storm提供的读取kafka的enternal工具存在bug,导致重复读取数据,致使数据不准确.storm bu ...
- HDU 3032 Nim or not Nim?(Multi_SG,打表找规律)
Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 自定义RadioGrop,支持添加包裹着的RadioButton
控件类: package com.chinaCEB.cebView; import android.annotation.TargetApi; import android.content.Conte ...
- 运维Python面试题
本章内容 1 osodjfoskjdofjsdjfjsdf 123 sdfdfadf 1 2 3 4 5 6 from django.db import models class user ...
- luogu3810 【模板】三维偏序(陌上花开)
ref1 ref2 ref3 ref4 #include <algorithm> #include <iostream> #include <cstdio> usi ...