【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 垂直行业应用的三点中美对比 四.给创业者的四个建 ...
随机推荐
- Uva 组装电脑 12124 - Assemble
主要运用二分法查找最优解 #include<iostream> #include<string> #include<vector> #include<map& ...
- tomcat修改默认主页, 前段项目放到tomcat下,浏览器输入ip加端口后,直接到项目主页
1,将 项目 放到 tomcat 的webapps 文件夹下 2, 修改conf 下的 server.xml , 找到 <Host name="localhost" appB ...
- java抓取12306火车余票信息
最近在弄一个微信的公众帐号,涉及到火车票查询,之前用的网上找到的一个接口,但只能查到火车时刻表,12306又没有提供专门的查票的接口.今天突然想起自己直接去12306上查询,抓取查询返回的数据包,这样 ...
- 使用Xshell对虚拟机上的Ubuntu系统进行远程连接
需要在Linux上安装openssh-server 1.在Ubuntu系统的终端下输入命令:sudo apt install openssh-server 2.在Xshell中输入指定连接的主机IP, ...
- python3调取百度地图API输出某地点的经纬度信息
1. 查看API接口说明 地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding 注:callback ...
- java web知识点
java web知识点 1.Java知识点 基本数据类型,面向对象,异常,IO,NIO,集合,多线程,JVM,高级特性. 2.web知识点 JSP,Serlvet,JDBC,Http 掌握Cookie ...
- leetcode 【 Partition List 】python 实现
题目: Given a linked list and a value x, partition it such that all nodes less than x come before node ...
- IE hasLayout详解
hasLayout定义 haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分.在Internet Explorer中,一个元素要么自己对自身的内容进行计算 ...
- 观15级K班团队作业有感
1.指尖加密 特点:通过可移动设备手机参与电脑文件的解密,使加密更加安全. 缺点:跟柯逍老师的想法差不多,UI简陋,操作不是很友好,或许可以加一个帮助文档. 2.youreyes 特点:可以检测路过的 ...
- iOS属性文字NSAttributedString
它本身是一个Foundation框架的类, 但如果要使用它主要用到了UIKit框架中的NSAttributedString中的一些常量字符串 ----------------------------- ...