首页 > 其他分享 >P9425 [蓝桥杯 2023 国 B] AB 路线 题解

P9425 [蓝桥杯 2023 国 B] AB 路线 题解

时间:2023-08-19 16:44:05浏览次数:45  
标签:nx AB 格子 int 题解 蓝桥 ny nz dis

~~应该能过官方数据吧~~

---

回归正题。我开始想过更简单的深搜,但是我怕无法记忆化,所以选择了广搜。和普通的广搜不同,此题的队列要存 $3$ 个维度,分别是 $x$,$y$,$z$,分别表示横坐标、纵坐标、目前的步数模 $2k$ 的值。

此时我们可以把每 $2k$ 步进行分组,前 $k$ 步走在 ```A``` 的格子上,后 $k$ 步走在 ```B``` 的格子上。

这里的每一步都要分类讨论,以下记 $a$ 为下一步模 $2k$ 的值。

- 当 $a \ge k$ 时,下一步必须走在 ```B``` 的格子上。

- 否则,下一步必须走在 ```A``` 的格子上。

然后就做完了。

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n,m,k,x,y,z,nx,ny,nz;
int dis[N][N]; 
char mp[N][N];
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
queue< pair< pair<int,int> ,int> >q; //用queue记三维信息
int main(){
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1; i<=n; i++) scanf("%s",mp[i]+1);
    if(mp[1][1]!='A'){
        puts("-1");
        return 0;
    }
    memset(dis,0x3f,sizeof dis);
    dis[1][1]=0;
    q.push({{1,1},0});
    while(!q.empty()){
        x=q.front().first.first;
        y=q.front().first.second;
        z=q.front().second;
        q.pop();
        for(int i=0; i<4; i++){
            nx=x+dx[i],ny=y+dy[i],nz=(z+1)%(2*k);
            if(nx<1 || nx>n || ny<1 || ny>m) continue;
            if(nz<k && mp[nx][ny]=='B') continue;
            if(nz>=k && mp[nx][ny]=='A') continue;
            if(dis[nx][ny]>dis[x][y]+1){
                dis[nx][ny]=dis[x][y]+1;
                q.push({{nx,ny},nz});
            }
        }
    }
    if(dis[n][m]==dis[0][0]) puts("-1");
    else printf("%d\n",dis[n][m]);
    return 0;
}

 

标签:nx,AB,格子,int,题解,蓝桥,ny,nz,dis
From: https://www.cnblogs.com/50lty12/p/17642660.html

相关文章

  • k8s推送代码至gitlab报错error: RPC failed; result=22, HTTP code = 413 fatal: The
    #gitpush-uoriginmainUsernamefor'http://gitlab.wjl.net':rootPasswordfor'http://[email protected]':Countingobjects:1032,done.Deltacompressionusingupto8threads.Compressingobjects:100%(871/871),done.error:R......
  • 【Oracle Real Application Cluster Database】集群删除节点
    [grid@node01~]$srvctlstoplistener-nnode03[grid@node01~]$srvctlstopinstance-dcore-nnode03[oracle@node01~]$dbca-silent-deleteInstance-nodeListnode03-gdbNamecore-instanceNamecore3-sysDBAUserNamesys-sysDBAPassword1QAZ2wsx......
  • 洛谷P5410 【模板】扩展 KMP(Z 函数)题解
    题目链接P5410【模板】扩展KMP(Z函数)-洛谷|计算机科学教育新生态(luogu.com.cn) 分析先考虑z数组设nx[i]为字符串b与b以b[i]开头的后缀最长公共前缀设i为当前需要求的位置当前i+nx[i]-1的最大值所对应的i为q p为i对应的位置当i大于q+nx[q......
  • Visual Studio 2022 没有MySQLDatabase数据源
    解决办法: ①下载安装MySQLODBC驱动②运行ODBC数据源管理器③添加MySQL数据源,填入相应信息,测试通过即可④打开VS 工具>>连接到数据库,选择MicrosoftODBCDataSource⑤下拉列表中选择刚才新建的ODBC数据源,确定。       由此,在VS的侧边栏就可以对MySQL......
  • arc139,arc140,arc141题解
    ARC139A-DATrailingZeros憨的。BMakeN感觉没有那么naive。首先用\(1\)去更新一下后面两个决策的价值。然后有一个较为显然的东西是说\(\text{lcm}\)为周期,周期内应该贪心取最大的。周期外由于范围很小,可以直接枚举一种决策的次数,取最小值即可。复杂度是正确的。CO......
  • UWB精确定位问题(TOA定位(三维空间四点定位)matlab实现)
    一、原理方法四点定位(Four-AnchorPositioning)是一种基于距离测量的定位方法,通常采用TOA方法来计算目标物体到每个基站的距离。通过测量目标物体到至少四个基站的距离,并利用三角定位等算法计算出目标物体的位置。因此,四点定位属于TOA定位方法的一种。在UWB精确定位中,四点定位(Four-A......
  • rabbitmq中是否支持事务
    是的,RabbitMQ支持事务。在RabbitMQ中,事务是一组操作的原子性操作。可以使用channel.txSelect()方法开始一个事务,并使用channel.txCommit()方法提交事务,或使用channel.txRollback()方法回滚事务。事务可以确保一组操作要么全部成功执行,要么全部回滚。但是需要注意,使用事务会降低Rabb......
  • 【Oracle Real Application Cluster Database】集群增加节点
    [grid@node03~]$ssh-keygen[grid@node03~]$ssh-copy-id-i~/.ssh/id_rsa.pubgrid@node03[grid@node03~]$ssh-copy-id-i~/.ssh/id_rsa.pubgrid@node01[grid@node03~]$(sshnode01"date;hostname";sshnode03"date;hostname")SatAug19......
  • Luogu P9510 『STA - R3』高维立方体 题解
    题目传送门没见过这玩意,写个题解记下。题目大意周知斐波那契数列定义为:\[\operatorname{fib}(n)=\left\{\begin{aligned}1&&n\le2\\\operatorname{fib}(n-1)+\operatorname{fib}(n-2)&&n>2\end{aligned}\right.\]然后定义(\(n\le0\)函数值为\(0\))\[f(n)......
  • CF-1860C Game on Permutation题解
    题意:在一条数轴上,Alice可以跳到在你所在点前面且值比当前所在点小的点。每回合可以向任意符合要求的点跳一次。当轮到Alice的回合同时不存在符合要求的点,Alice就赢了。Alice可以选择一个点作为起始点,然后作为后手(赛时这里把我坑了)。问有多少个点是必胜的点。\(n\leq3\times10^5......