2019.6.28 校内测试 T1 Jelly的难题1
这题面有点难理解,建议直接跳到题意解释那一部分(虽然我觉得解释的不大对,但按照解释来做确实能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的更多相关文章
- 2019.7.9 校内测试 T1挖地雷
这一次是交流测试?边交流边测试(滑稽 挖地雷 这个题是一个递推问题. 首先我们看第一个格子,因为它只影响了它的上面和右上面这两个地方是否有雷. 我们可以分3种情况讨论: 1. 第一个格子的数字是2: ...
- 2019.6.28 校内测试 T4 【音乐会】达拉崩吧·上
考试的一道附加题~ 一看题目描述:把区间[l,r]里每个数异或上x,求区间[l,r]里所有数的异或和,这明显的要用数据结构或RMQ吧. 恩,所以正解就是线段树啦,至于树状数组行与否,不知道~ wate ...
- 2019.6.28 校内测试 T3 【音乐会】道路千万条
大眼一看最下面的题意解释的话,发现这和洛谷P1310表达式的值挺像的,大概都是给定一些运算符号,让最后的表达式为true的概率,为false的概率啥的QwQ~: 然后这个题嘛?就是在所有的运算符中提溜 ...
- 2019.6.28 校内测试 T2 【音乐会】二重变革
看到这个题之后,一个很暴力很直接的想法就是贴上题目中的代码然后交上去走人,但是很显然这是会TLE+MLE的,想想谁会这么傻把主要代码给你QwQ~: 其实这段代码是想告诉你一件事:用序列中的大数减去小数 ...
- 【6.28校内test】T1 Jelly的难题1
Jelly的难题[题目链接] 废话一句:今天中考出成绩,感觉大家考的都超级棒,不管怎样,愿大家成为最好的自己. 好了废话完了,下面是题解部分: SOLUTION: 首先你可能发生的,是看不懂题: 定睛 ...
- 2019.7.9 校内测试 T3 15数码问题
这一次是交流测试?边交流边测试(滑稽 15数码问题 大家应该都玩过这个15数码的游戏吧,就在桌面小具库那里面哦. 一看到这个题就知道要GG,本着能骗点分的原则输出了 t 个无解,本来以为要爆零,没想到 ...
- 2019.7.9 校内测试 T2 极值问题
这一次是交流测试?边交流边测试(滑稽 极值问题 乍一看这是一道数学题,因为1e9的数据让我暴力的心退却. 数学又不好,不会化简式子嘞,咋办? 不怕,咱会打表找规律.(考场上真的是打表找出了规律,打表打 ...
- 2019.6.24 校内测试 NOIP模拟 Day 2 分析+题解
看到Day 2的题真的想打死zay了,忒难了QwQ~ T1 江城唱晚 这明显是个求方案数的计数问题,一般的套路是DP和组合数学. 正如题目中所说,这个题是一个 math 题. ----zay ...
- 2019.6.20 校内测试 NOIP模拟 Day 1 分析+题解
这次是zay神仙给我们出的NOIP模拟题,不得不说好难啊QwQ,又倒数了~ T1 大美江湖 这个题是一个简单的模拟题. ----zay 唯一的坑点就是打怪的时候计算向上取整时,如果用ceil函数一 ...
随机推荐
- PAT-1012 The Best Rank (25 分) 查询分数对应排名(包括并列)
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- 15-MySQL DBA笔记-运维管理
第15章 运维管理 随着各种技术的快速发展,现今的DBA可以比以前的DBA维护多得多的数据库实例.DBA已经越来越像一个资源的管理者,而不是简单的操作步骤执行人.本章将为读者介绍规模化运维之道.首先, ...
- MQTTnet 3.0.5学习笔记
段时间在使用MQTTnet,都说这个东西比较好,可是翻了翻网上没有例子给参考一下. 今天算是找到了,给高手的帖子做个宣传吧. 原网址如下:https://blog.csdn.net/chenlu520 ...
- Swagger 实践 <一>
参考 :https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-nswag?view=aspnetcor ...
- Python中带参数的装饰器
装饰器本身是用来是为一个函数是实现新的功能,并且不改变原函数的代码以及调用方式. 遇到这样一种问题: 众多函数调用了你写的装饰器,但客户有需求说,我想实现我可以随之控制装饰器是否生效. 那你就不可能在 ...
- document对象详解
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
- linux设置密钥登录(只允许密钥登录)
一.root用户使用这条命令看看家目录有没有(.ssh文件夹),cd .ssh,如果存在就会进入这个文件夹,不存在就(makedir .ssh),修改.ssh这个文件夹权限(chmod 700 .ss ...
- 惊呆!Java程序员等级一览
凡人:买本书凑凑热闹,听得多写的少,过段时间就把老师教的都忘了.这个阶段是刷掉人最多的阶段,也是从凡人到程序员本质区别的阶段.你的日后成就在于你的习惯与态度.隔一段时间整理自己的知识体系是重中之重 ...
- ajax _flask
同步访问 当客户端向服务器发送请求时,服务器在处理过程中,浏览器只能等等,效率偏低 异步访问: 当客户端向服务器发送请求时,服务器在处理过程中,客户端可以做其他的操作,不需要一直等待,效率偏高 AJA ...
- c# System.Enum的方法