CF1182B Plus from Picture 题解
写在前面
为什么在已经有 \(12\) 篇题解后,我还是要写这篇题解?
因为这篇题解提供一个码量较小,且时间复杂度严格 \(O(wh)\) 的做法,目前这种做法题解区没有。
进入正题
设 \(cnt[i]\) 表示地图中的 * 周围四联通有 \(i\) 个 * 的位置的数量
考虑到地图中有且仅有一个 + 形图形的性质:
\(1\) :若要保证有且仅有一个 + 形图形,则 \(cnt[4]=1\) 。因为每个 + 形图形对应一个周围四联通有四个 * 的 * (中间那一个),所以周围四联通有四个 * 的 * 有且仅有一个 。
括号圈起来的是这一条所描述的点,后面也是如此:
*
*(*)*
*
\(2\) :若要保证有且仅有一个 + 形图形,则 \(cnt[1]=4\) 。因为每个 + 形图形对应四个周围四联通有一个 * 的 * ( + 形图形的最外围),所以周围四联通有一个 * 的 * 有且仅有四个 。
(*)
(*)*(*)
(*)
\(3\) :若要保证除 + 形图形各点之外,整张地图均为 . ,则 \(cnt[0]=0\) 且 \(cnt[3]=0\) 。因为 + 形图形中不存在这样的点,若存在,则必然是 + 形图形各点之外的 * ,不能保证除 + 形图形各点之外,整张地图均为 . 。
. . . .(*)
. * . . .
*(*). . .
. * . . .
\(4\) :对于 \(cnt[2]\) ,如果上面的点与下面的点,左边的点和右边的点分别相同,则这个点对结果无影响。因为 + 形图形可能存在这样的点。
*
**(*)*
(*)
*
\(5\) :对于 \(cnt[2]\) ,如果不满足上面情况,则地图中除 + 形图形各点之外,整张地图必然不均为 . 。因为 + 形图形中同样不存在这样的点。
. . . .
.(*)* .
. *(*).
. . . .
所以,只要判断这五条性质,就能得出结果。
复杂度分析
很显然,扫一遍数组就可以得到结论了。
时间复杂度: \(O(wh)\)
空间复杂度: \(O(wh)\)
完整代码
#include <bits/stdc++.h>
using namespace std;
int w,h,cnt[5];
char map1[501][501];
int main()
{
scanf("%d%d",&w,&h);
for(int i=0;i<w;i++)
scanf("%s",map1[i]);
for(int i=0;i<w;i++)
for(int j=0;j<h;j++)
{
int ans1=0,ans2=0;
if(map1[i][j]!='*')continue; \\如果不是*,没有必要计算
if(i-1>=0&&map1[i-1][j]=='*')ans1++;
if(i+1<w&&map1[i+1][j]=='*')ans1++; \\上下点的情况
if(j-1>=0&&map1[i][j-1]=='*')ans2++;
if(j+1<h&&map1[i][j+1]=='*')ans2++; \\左右点的情况
if(ans1%2&&ans2%2) \\判断上下左右点是否分别相等
{ \\如果分别相等则对应的计数一定都为偶数
printf("NO\n");
return 0;
}
cnt[ans1+ans2]++;
}
if(cnt[0]==0&&cnt[1]==4&&cnt[3]==0&&cnt[4]==1)printf("YES\n"); \\综合五条性质判断
else printf("NO\n");
return 0;
}
后记
于 \(2022\) 年 \(12\) 月 \(16\) 日达成最优解。

CF1182B Plus from Picture 题解的更多相关文章
- UVa-10652 包装木板
Input: standard inputOutput: standard output Time Limit: 2 seconds The small sawmill in Mission, Bri ...
- 【题解】「CF1182B」Plus from Picture
这是一道超级水的模拟 + 简单搜索. 说说思路: 先找到中心点,就是自己和上下左右都为 * 的. 上下左右上的所有 * 都删掉,然后再看看有没有多余的 * 如果有输出 NO 否则输出 YES. 比如说 ...
- 【题解】POJ2279 Mr.Young′s Picture Permutations dp
[题解]POJ2279 Mr.Young′s Picture Permutations dp 钦定从小往大放,然后直接dp. \(dp(t1,t2,t3,t4,t5)\)代表每一行多少人,判断边界就能 ...
- 题解报告:hdu 1162 Eddy's picture
Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to become ...
- [题解]P1856 [USACO5.5]矩形周长Picture
Loli 考试的题目之一 题目地址 \(N^2\)做法 #include <cstdio> #include <cstring> #define re register #de ...
- POJ P2279 Mr. Young's Picture Permutations 题解
每日一题 day14 打卡 Analysis 五维dpf[a1,a2,a3,a4,a5]表示各排从左端起分别占了a1,a2,a3,a4,a5个人时合影方案数量然后我们枚举a1,a2,a3,a4,a5从 ...
- 【题解】CF1368C Even Picture
\(\color{purple}{Link}\) \(\text{Solution:}\) 这是一道构造题. 题目要求恰好有\(n\)个点的四周全都是灰色点,所以直接输正方形是不行了. 考虑\(k=1 ...
- [POJ1177]Picture
[POJ1177]Picture 试题描述 A number of rectangular posters, photographs and other pictures of the same sh ...
- NBUT1541 Rainwater 题解
http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1541 When rain, nocLyt discovered a magical phenomeno ...
- hdu 1828 Picture(线段树 || 普通hash标记)
http://acm.hdu.edu.cn/showproblem.php?pid=1828 Picture Time Limit: 6000/2000 MS (Java/Others) Mem ...
随机推荐
- MySQL隐藏手机号
1.实现方法 通过MySQL的left.right.contact函数实现 2.语法说明 contact()函数 作用:将多个字符串连接成一个字符串 语法:concat(字符串1,....,字符串n) ...
- Robot Framework使用循环
1.普通的For循环 在一个普通的For循环中,循环开始的关键字是 :FOR ,其中的:用于与一般关键字做区分,对于循环结 构体内的每一行,使用 \ 作为改行的行首关键字.对于循环中的变量,可以在 I ...
- 什么是 Write-Ahead Logging (WAL) 技术?它的优点是什么?MySQL 中是否用到了 WAL?
什么是 Write-Ahead Logging (WAL) 技术? Write-Ahead Logging (WAL) 是一种用于数据库系统的日志记录技术,它要求在对数据库进行任何修改之前,所有的修改 ...
- Java 里的对象在虚拟机里面是怎么存储的?
Java 中的对象在虚拟机里的存储 在 Java 中,对象在虚拟机中的存储方式取决于 JVM 内存模型,主要存储在 堆(Heap) 中.对象的内存布局和管理方式会影响对象的创建.访问和销毁.下面详细解 ...
- 『Plotly实战指南』--样式定制基础篇
在数据可视化的世界中,一个精心设计的图表不仅能准确传达信息,还能提升整体的专业性和吸引力. 而Plotly作为Python中强大的可视化库,提供了丰富的样式定制功能,帮助我们轻松实现这一目标. 本文从 ...
- Debian 12 安装&卸载 MySQL 8.4 教程
MySQL 8.4 安装指南 本指南将详细介绍如何在 Linux (Debian/Ubuntu) 上手动安装 MySQL 8.4,并进行基本配置. MySQL官网 1. 安装前准备 1.1 更新系统并 ...
- jdk源码目录说明
- 【HUST】网络攻防实践|5_二进制文件补丁技术|实验三 热补丁
文章目录 实验要求 实验过程 1. 64位Ubuntu下先安装32位库 2. 利用Preload Hook实现热补丁修补 3. 利用系统调用`ptrace`对运行状态的程序进行hook 3.1 编写补 ...
- 阅读类元服务开发笔记---week3
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- 阿里云数据库Inventory Hint技术分析
秒杀场景是电商系统中最具挑战性的场景之一,其核心痛点在于超高并发请求(百万级甚至千万级QPS) 与 有限库存 之间的矛盾,以及由此引发的 系统崩溃.超卖.不公平 等问题.阿里通过一套精密的架构和算法组 ...