【6.28校内test】T1 Jelly的难题1
废话一句:今天中考出成绩,感觉大家考的都超级棒,不管怎样,愿大家成为最好的自己。
好了废话完了,下面是题解部分:
SOLUTION:
首先你可能发生的,是看不懂题:

定睛一看,这是个广搜!(然后非常幸运昨天刚做了一个广搜的题,然后我就会了)
首先先是输入部分,这个真的很毒瘤了,当sy已经去忙akT1的时候,我还在可怜的与读入作斗争(与读入抗争掉了大部分时间可还行)。读入很毒瘤,因为每个字符之间有空格,所以读入的时候要用while过滤。然后咱的读入好生毒瘤,看看就好啦(相信像ych这样的大佬肯定有更优的方法):
n=read();m=read();
char ch=getchar();
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
while(ch==' '||ch=='\n'||ch=='\r') ch=getchar();
a1[i][j]=ch;
if(a1[i][j]=='*') x=i,y=j,a[i][j]=;
if(a1[i][j]=='#') a[i][j]=;
if(a1[i][j]=='o') a[i][j]=;
ch=getchar();
}
}
然后就是bfs部分了,其实就是一个标准的广搜板子,然后因为最近看了tarjan,我居然在bfs里用了时间戳可海星。
首先要说一直理解不了构造函数这种东西,所以一直都是写赋值函数,看看就好。
首先显然是把*(也就是打印机)的地方加进队列中,然后别忘记开vis记录已经走过了。
然后while(!q.empty()),每次取出队首,向四个方向扩展(当然前提是可以扩展因此记得写pan函数),然后对于最大时间以及卷子数量,我用了时间
的理念,也就是记录访问顺序(当然并不是完全时间戳),进行储存与bfs,每次取出队首,然后四个方向尝试拓展,如果可以拓展,那么拓展,将其入队,并将新入队的结点的dfn值在被拓展出的结点的基础上+1,这样最大的dfn也就是最大的时间ans。然后还有如何算总共的卷子数,我的算法比较复杂,感觉过于麻烦了(看看就好啦),记录每个时间戳,然后用ans-时间戳+1,表示的就是这个结点的卷子数。然后加起来就好啦。
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=;
char last,ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
}
int n,m,x,y;
int a[][];
int dx[]={,-,,};
int dy[]={,,-,};
char a1[][];
bool vis[][];
const int mod=;
struct node{
int x,y,dfn;
};
node fz(int x,int y,int dfn){
node rtn;
rtn.x=x;
rtn.y=y;
rtn.dfn=dfn;
return rtn;
}
bool pan(int x,int y){//判断函数,保证行走合法
return x>=&&y>=&&x<=n&&y<=m&&vis[x][y]==&&a[x][y]==;
}
queue<node> q;
void bfs(){
q.push(fz(x,y,));
vis[x][y]=;
int ans=,sum=;
int cnt=,cz[];
while(!q.empty()){
node h=q.front();
cz[++cnt]=h.dfn%mod;
q.pop();
for(int i=;i<;i++){
int xx=h.x,yy=h.y,dfnn=h.dfn;
if(pan(xx+dx[i],yy+dy[i])){
xx+=dx[i];yy+=dy[i];
q.push(fz(xx,yy,dfnn+));
vis[xx][yy]=;
if(dfnn+>ans) ans=dfnn+;
}
}
}
for(int i=;i<=cnt;i++)//我太菜了的求卷子数法qwq
sum=(sum%mod+ans%mod-cz[i]%mod+)%mod;
cout<<ans<<endl<<sum<<endl;
}
int main(){
n=read();m=read();
char ch=getchar();
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
while(ch==' '||ch=='\n'||ch=='\r') ch=getchar();
a1[i][j]=ch;
if(a1[i][j]=='*') x=i,y=j,a[i][j]=;
if(a1[i][j]=='#') a[i][j]=;
if(a1[i][j]=='o') a[i][j]=;
ch=getchar();
}
}
bfs();
return ;
}
end-
【6.28校内test】T1 Jelly的难题1的更多相关文章
- 2019.6.28 校内测试 T1 Jelly的难题1
这题面有点难理解,建议直接跳到题意解释那一部分(虽然我觉得解释的不大对,但按照解释来做确实能AC): 按照“题意解释”的思路来思考这个题,那么就十分的简单了: 1.首先要读入这个字符矩阵,可以用cin ...
- T84341 Jelly的难题1
T84341 Jelly的难题1 题解 当窝发现窝的锅在读入这个矩阵的时候,窝..窝..窝.. 果然,一遇到和字符串有关的题就开始吹空调 好啦我们说说思路吧 BFS队列实现 拿出一个没有走过的点,扩展 ...
- 【8.28校内测试】【区间DP】
感受到了生活的艰辛QAQ...这才是真正的爆锤啊...(因为t1t3还没有理解所以只能贴t2叻QAQ 区间DP...爆哭把题理解错了,以为随着拿的东西越来越多,断点也会越来越多,出现可以选很多的情况Q ...
- 18清明校内测试T1
消失的数字(number) Time Limit:1000ms Memory Limit:128MB 题目描述 rsy拥有n个数,这n个数分别是a1,a2,…,an. 后来出现了一个熊孩子zhw, ...
- 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】T2 【音乐会】二重变革
[音乐会]二重变革[题目链接] T2其实是一道数学题,因为你看: 2MB??一共就可以存下个int,然鹅再看数据范围: 那么大是稳稳的不是TLE就是MLE了,所以肯定是数学题,而且是只需要存很少数据的 ...
随机推荐
- 51 Nod 1068 Bash游戏v3
1068 Bash游戏 V3 题目来源: Ural 1180 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有一堆石子共有N个.A B两个人轮流 ...
- 【杂题】[LibreOJ #6608] 无意识的石子堆【容斥原理】【FFT】
Description Solution 943718401=225*2^22+1 显然每行必须有两个,我们不妨枚举有k列有2个石子,那么有2(n-k)列有1个石子. \[Ans=\sum\limit ...
- 工具类-ApplicationContextUtil
package com.zhouyy.netBank.util; import org.springframework.beans.BeansException; import org.springf ...
- php curl方法 支持 http https get post cookie
//请求方式curl封装 @author Geyaru QQ 534208139 参数1:访问的URL,参数2:post数据(不填则为GET),参数3:提交的$cookies,参数4:是否返回$coo ...
- koa2,koa-jwt中token验证实战详解
用户身份验证通常有两种方式,一种是基于cookie的认证方式,另一种是基于token的认证方式.当前常见的无疑是基于token的认证方式.以下所提到的koa均为koa2版本. token认证的优点是无 ...
- C++入门经典-例4.2-调用默认参数的函数
1:代码如下: // 4.2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- C++入门经典-例3.4-根据成绩划分等级
1:代码如下: // 3.4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- LeetCode 79. 单词搜索(Word Search)
题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被 ...
- [转]maven中scope详解
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: * compile,缺省值,适用于所有阶 ...
- Git-Runoob:Git 服务器搭建
ylbtech-Git-Runoob:Git 服务器搭建 1.返回顶部 1. Git 服务器搭建 上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,但是如果你不想让其他人看 ...