这题面有点难理解,建议直接跳到题意解释那一部分(虽然我觉得解释的不大对,但按照解释来做确实能AC);

按照“题意解释”的思路来思考这个题,那么就十分的简单了:

1.首先要读入这个字符矩阵,可以用cin(会不会TLE不知道),这里我用的是getchar读入;

2.从‘ * ’开始一遍广搜,记录一下每个‘ # ’被搜索到的时间,直到所有的点都被遍历过;

3.找出所有‘ # ’的位置时间最大的那个,就是第一问的答案,暂且记为much;

4.因为走过的格子每单位时间会增加1点高度,所以对于某一个格子 i,若遍历它的最短时间是ti,那么它对答案作出的贡献就是:much - ti + 1,将每个格子的贡献累加起来就是第二问的答案啦;

5.考虑判断无解的情况:O(nm)暴力扫一遍所有的格子,如果出现了遍历时间为0的情况(也就是说某个格子没有被遍历到),说明无解;

代码如下:

#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
const int mod=;
char read() //自定义字符读入
{
char ch=getchar();
while(ch!='*'&&ch!='o'&&ch!='#') ch=getchar(); //不是题目中的三种字符就一直往下读
return ch;
}
struct juanzi //开一个结构体,存每一个格子的信息:最先被遍历的时间是t,坐标是(x1,y1)
{
int t,x1,y1;
}b[];
queue<juanzi> q; //开一个结构体类型的队列
char a[][]; //存输入的字符矩阵
int n,m,start,endd,xx,yy; //n*m的矩阵,打印机'*'的坐标是(start,endd),注意不要用end,好像会和STL里面的东西重名(我CE我知道)
int dx[]={,,,-,}; //四个方向
int dy[]={,,-,,};
int vis[][]; //存每个点被遍历的时间
int ans,much;
void bfs()
{
q.push((juanzi){,start,endd}); //起点入队
juanzi f;
while(!q.empty()) //其实我们每一步都判断是否将所有点都遍历过,只需判队列非空就好啦,队列为空就说明无法再遍历到其他的点了
{
f=q.front();
q.pop();
for(int i=;i<=;i++)
{
xx=f.x1+dx[i]; //往四个方向走
yy=f.y1+dy[i];
if(a[xx][yy]=='#'&&vis[xx][yy]==) //如果可以走并且之前没走过,那就走
{
vis[xx][yy]=f.t+; //到这个格子的时间是上一个格子的时间再加一
q.push((juanzi){f.t+,xx,yy}); //入队去遍历下面的格子
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
a[i][j]=read();
if(a[i][j]=='*') //记录下打印机'*'的位置
{
start=i;
endd=j;
vis[i][j]=-; //把不能遍历的点的时间全赋成-1
}
if(a[i][j]=='o') vis[i][j]=-; //花盆的位置
}
bfs(); //核心代码:广度优先搜索
for(int i=;i<=n;i++) //判无解的情况
for(int j=;j<=m;j++)
if(vis[i][j]==)
{
cout<<-;return ;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
much=max(much,vis[i][j]); //找最后被遍历到的点所需要的时间
printf("%d\n",much);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(vis[i][j]>) //排除了打印机'*'和花盆'o'的位置
{
ans=(ans+(much-vis[i][j]+)%mod)%mod; //每个格子的贡献
}
}
printf("%d",ans);
return ;
}
/*
其实由于数据有锅,无解的情况没有看出来,当成有解的情况做了;
AC代码要注释掉那个判断无解的情况QwQ~
但加上那一段判无解的代码应该才是最正确的
*/

2019.6.28 校内测试 T1 Jelly的难题1的更多相关文章

  1. 2019.7.9 校内测试 T1挖地雷

    这一次是交流测试?边交流边测试(滑稽 挖地雷 这个题是一个递推问题. 首先我们看第一个格子,因为它只影响了它的上面和右上面这两个地方是否有雷. 我们可以分3种情况讨论: 1. 第一个格子的数字是2: ...

  2. 2019.6.28 校内测试 T4 【音乐会】达拉崩吧·上

    考试的一道附加题~ 一看题目描述:把区间[l,r]里每个数异或上x,求区间[l,r]里所有数的异或和,这明显的要用数据结构或RMQ吧. 恩,所以正解就是线段树啦,至于树状数组行与否,不知道~ wate ...

  3. 2019.6.28 校内测试 T3 【音乐会】道路千万条

    大眼一看最下面的题意解释的话,发现这和洛谷P1310表达式的值挺像的,大概都是给定一些运算符号,让最后的表达式为true的概率,为false的概率啥的QwQ~: 然后这个题嘛?就是在所有的运算符中提溜 ...

  4. 2019.6.28 校内测试 T2 【音乐会】二重变革

    看到这个题之后,一个很暴力很直接的想法就是贴上题目中的代码然后交上去走人,但是很显然这是会TLE+MLE的,想想谁会这么傻把主要代码给你QwQ~: 其实这段代码是想告诉你一件事:用序列中的大数减去小数 ...

  5. 【6.28校内test】T1 Jelly的难题1

    Jelly的难题[题目链接] 废话一句:今天中考出成绩,感觉大家考的都超级棒,不管怎样,愿大家成为最好的自己. 好了废话完了,下面是题解部分: SOLUTION: 首先你可能发生的,是看不懂题: 定睛 ...

  6. 2019.7.9 校内测试 T3 15数码问题

    这一次是交流测试?边交流边测试(滑稽 15数码问题 大家应该都玩过这个15数码的游戏吧,就在桌面小具库那里面哦. 一看到这个题就知道要GG,本着能骗点分的原则输出了 t 个无解,本来以为要爆零,没想到 ...

  7. 2019.7.9 校内测试 T2 极值问题

    这一次是交流测试?边交流边测试(滑稽 极值问题 乍一看这是一道数学题,因为1e9的数据让我暴力的心退却. 数学又不好,不会化简式子嘞,咋办? 不怕,咱会打表找规律.(考场上真的是打表找出了规律,打表打 ...

  8. 2019.6.24 校内测试 NOIP模拟 Day 2 分析+题解

    看到Day 2的题真的想打死zay了,忒难了QwQ~ T1 江城唱晚 这明显是个求方案数的计数问题,一般的套路是DP和组合数学. 正如题目中所说,这个题是一个 math 题.      ----zay ...

  9. 2019.6.20 校内测试 NOIP模拟 Day 1 分析+题解

    这次是zay神仙给我们出的NOIP模拟题,不得不说好难啊QwQ,又倒数了~ T1 大美江湖 这个题是一个简单的模拟题.   ----zay 唯一的坑点就是打怪的时候计算向上取整时,如果用ceil函数一 ...

随机推荐

  1. 部署java应用的几种方式

    J2EE应用 该应用根目录下有好多文件夹和以jsp结尾的文件 部署时,需要在tomcat的conf目录下的server.xml文件中添加上<Context path="/" ...

  2. 在docker下SQL Server attach mdf和ldf文件

    (DB:MyPost) USE masterGO-- Create database via attachCREATE DATABASE [MyPost]    ON ( FILENAME = N'C ...

  3. java 框架-分布式服务框架1ZooKeeper

    https://www.cnblogs.com/felixzh/p/5869212.html Zookeeper的功能以及工作原理   1.ZooKeeper是什么?ZooKeeper是一个分布式的, ...

  4. centos 随机启动脚本编写

    先说下问题背景 目前手上开发的产品是springboot微服务的,我们用jenkins来做的部署,部署脚本如下: 1.build脚本 负责从git服务器拉脚本 2.微服务脚本: #!/bin/shap ...

  5. 根据导入xlxs的文件,来写入数据库

    今天讲解一下上传文件.前台必须保持传参类型"multipart/form-data" 后台可以设定 public static final String MULTIPART_FOR ...

  6. iOS - 解决警告“ld: Warning: Directory Not Found for Option”

    有时候我们可能从项目中删除了某个目录.文件以后,编译出现警告信息: ld: warning: directory not found for option“XXXXXX” 具体类似下图: 很奇怪,为什 ...

  7. 关于NSOperationQueue,一个容易让初学者误解的问题

    凡是学习NSOperationQueue的人,都会遇到setMaxConcurrentOperationCount这个函数.在网上的许多博文中,都将setMaxConcurrentOperationC ...

  8. 如何将Chrome本地安装的扩展应用导出到本地

    有时由于种种原因,我们不能直接使用Chrome web store进行Chrome扩展应用的安装,这时可以让一位已经安装了某Chrome扩展应用的朋友将他的应用导出到本地成为.crx文件,然后发给你, ...

  9. ASE19团队项目beta阶段Backend组 scrum8 记录

    本次会议于12月17日,19:30在微软北京西二号楼sky garden召开,持续10分钟. 与会人员:Hao Wang, Lihao Ran, Xin Kang, Zhikai Chen 每个人的工 ...

  10. JFrame windowbuiler的使用基础

    一.通过windowbuilder创建java项目: New --Other--windowbuilder--SWT Designer --SWT/JFace Java Project 二.创建文件 ...