OpenJudge NOI 1.8 17:最好的草
【题目链接】
OpenJudge NOI 1.8 17:最好的草
【题目考点】
1. 二维数组
2. 方向数组
表示上下左右的方向数组:
int dir[4][2] = {{0,1},{0,-1},{-1,0},{1,0}};
或
int dx[4] = {0,0,1,-1}, dy[4] = {1,-1,0,0};
【解题思路】
理解题意,相邻两个’#'算作一块草丛。
可以理解为:
.#.
是1个草丛
.##
是1个草丛
###
是2个草丛
.#.
###
是4个草丛
.#.
因而每个#
有两种情况:
- 参与到一个两个
#
组成的草丛中,相当于每个#
贡献0.5个草丛。如果它周围有x个#
,它就会参与构成x个草丛,它贡献的草丛数为0.5x0.5x0.5x - 单独形成一个草丛,每个
#
贡献1个草丛
为了避免处理小数,把上述推导中的小数变为整数,改为计分制,一个草丛算2分,叙述如下:
遍历整个二维数组,如果当前位置是#
,则遍历其周围上下左右四个位置
- 如果这四个位置中存在
#
,则中心位置参与构成两个#
的草丛。每存在一个#
,加1分。 - 如果四个位置不存在
#
,那么中心位置的#
独自构成一个草丛,加2分。
最后将总分数除以2,即为草丛的个数。
【题解代码】
解法1:二维方向数组
#include <bits/stdc++.h>
using namespace std;
#define N 105
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int main()
{//单独的草算2分,如果由2块组成的草一定会被计算两次,每个算1分。最后除以2。char a[N][N];int r, c, s = 0;cin >> r >> c;for(int i = 1; i <= r; i++)for(int j = 1; j <= c; j++)cin >> a[i][j];for(int i = 1; i <= r; i++)for(int j = 1; j <= c; j++){if(a[i][j] == '#'){bool flag = false;//i,j周围有是否有草for(int d = 0; d < 4; d++){int x = i + dir[d][0], y = j + dir[d][1];if(x >= 1 && x <= r && y >= 1 && y <= c && a[x][y] == '#'){s++;flag = true;}}if(flag == false)//一个#单独构成草丛s += 2;}}cout << s/2;return 0;
}
解法2:一维方向数组
#include <bits/stdc++.h>
using namespace std;
#define N 105
int dx[4] = {0,0,1,-1}, dy[4] = {1,-1,0,0};
int main()
{char a[N][N];int r, c, s = 0;cin >> r >> c;for(int i = 1; i <= r; i++)for(int j = 1; j <= c; j++)cin >> a[i][j];for(int i = 1; i <= r; i++)for(int j = 1; j <= c; j++){if(a[i][j] == '#'){bool flag = false;//i,j周围有没有草for(int d = 0; d < 4; d++){int x = i + dx[d], y = j + dy[d];if(x >= 1 && x <= r && y >= 1 && y <= c && a[x][y] == '#'){s++;flag = true;}}if(flag == false)s += 2;}}cout << s/2;return 0;
}
OpenJudge NOI 1.8 17:最好的草相关推荐
- OpenJudge NOI 1.7 17:字符串判等
[题目链接] OpenJudge NOI 1.7 17:字符串判等 [题目考点] 1. 字符串 2. 大小写转换 'a'的ASCII码是97,'A'的ASCII码是65,同一字母的大小写字母的ASCI ...
- 信息学奥赛一本通 1071:菲波那契数 | OpenJudge NOI 1.5 17:菲波那契数列
[题目链接] ybt 1071:菲波那契数 OpenJudge NOI 1.5 17:菲波那契数列 [题目考点] 1. 斐波那契数列 参考:多种方法求斐波那契数列 [解题思路] 迭代法求斐波那契数列 ...
- 信息学奥赛一本通 1055:判断闰年 | OpenJudge NOI 1.4 17
[题目链接] ybt 1055:判断闰年 OpenJudge NOI 1.4 17:判断闰年 [题目考点] 1. 闰年定义 整百年份中,能被400整除的年份才是闰年 非整百年份中,能被4整除的年份是闰 ...
- 信息学奥赛一本通 1034:计算三角形面积 | OpenJudge NOI 1.3 17
[题目链接] ybt 1034:计算三角形面积 OpenJudge NOI 1.3 17:计算三角形面积 [题目考点] 1. 已知三点求三角形面积公式 已知三点分别为(x1,y1),(x2,y2),( ...
- 信息学奥赛一本通 2050:【例5.20】字串包含 | OpenJudge NOI 1.17 19:字符串移位包含问题
[题目链接] ybt 2050:[例5.20]字串包含 OpenJudge NOI 1.17 19:字符串移位包含问题 [题目考点] 1. 字符串 2. 判断一个字符串是不是另一个字符串的子串(字符串 ...
- 【OpenJudge NOI】题解目录
[OpenJudge NOI]题解目录 OJ链接:OpenJudge NOI 以下为本人做的OJ题解 针对每一道题我都会给出题目考点.解题思路.题解代码.必要时也会给出不同的解题方法. 如有不足之处, ...
- 信息学奥赛一本通 1066:满足条件的数累加 | OpenJudge NOI 1.5 10
[题目链接] ybt 1066:满足条件的数累加 OpenJudge NOI 1.5 10:满足条件的数累加 [题目考点] 1. 循环求和 设置加和变量s,记住要将其初始化为0.int s = 0; ...
- OpenJudge NOI题库 1.5编程基础之循环控制
OpenJudge NOI题库 1.5编程基础之循环控制 OpenJudge - OpenJudge - 题目 1.5_01求平均年龄 1.5_01求平均年龄_哔哩哔哩_bilibili 1.5_02 ...
- 信息学奥赛一本通 1232:Crossing River | OpenJudge NOI 4.6 702:Crossing River
[题目链接] ybt 1232:Crossing River OpenJudge NOI 4.6 702:Crossing River 一本通里的翻译不够完整,OpenJudge中的英文原题中有对数据 ...
最新文章
- 共话数据智能新经济,首届市北·GMIS 2019全球数据智能峰会隆重召开
- 除了不要 SELECT * ,数据库还有哪些技巧
- EggNOG功能注释数据库在线和本地使用
- 2021年人工神经网络第四次作业:基于MATLAB的求解
- 从零开始入门 K8s | 调度器的调度流程和算法介绍
- asp.net 调用带证书的webservice解决办法
- django 怎么加权限 静态资源目录_Django:settings中关于static静态文件目录的设置...
- java垃圾回收机制标记_Java的垃圾回收机制-垃圾收集算法(一)
- 解决margin-top塌陷问题的六种方法
- 如何实现二级菜单 html,javascript,html5_如何用vue实现二级菜单栏,javascript,html5,html,vue.js - phpStudy...
- Visual Studio Node.js工具1.1
- 全球排名前50网站使用的开发语言及系统平台
- ERP+WMS信息一体化案例:汽车钢板弹簧企业【神风弹簧】
- Illustrator导入word中的visio图片方法
- 一次学会两种方式将 python 打成 exe
- 数字图像处理——图像边缘检测
- MySQL函数 if 的使用
- 高等数学几何图形凸优化
- 更改MyEclipse匹配颜色
- 程序猿头头(js数组reverse,sort,concat,slice, splice)
热门文章
- GConf error:Failed to contact configuration server
- 基于visual Studio2013解决面试题之0410计算二进制中1的个数
- 20 行 Python 代码说清量子霸权!
- 一个秒杀系统,居然比八股文还好使!
- Java 14 发布了,再也不怕NullPointerException 了!?
- 开发指南专题一: JEECG微云快速开发平台前言
- JEECG v2.3 发布,基于代码生成器的智能开发框架
- 爬虫神器:一条命令下载《复仇者联盟3:无限战争》
- apache/nginx中equest.getServerName()外网环境获取不到代理地址/域名
- Mybatis中接口和对应的mapper文件位置配置详解