news 2026/10/14 11:47:43

打卡信奥刷题(3629)用C++实现信奥题 P11864 「o.OI R1」α+β Problem

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(3629)用C++实现信奥题 P11864 「o.OI R1」α+β Problem

P11864 「o.OI R1」α+β Problem

题目背景

机器人小α\alphaα喜欢做游戏,机器人小β\betaβ喜欢玩游戏。

题目描述

现在,它们正在玩一个叫作推箱子的游戏!

机器人小β\betaβ为关卡制定了一个用字符串表示的移动路径:

字符含义
W让机器人前进一格
S让机器人后退一格
A让机器人左转
D让机器人右转

身为机器人小α\alphaα,你需要构造一个n×mn\times mn×m的地图:

字符含义
|机器人无法穿过的墙壁
X机器人最开始在的位置
S箱子最开始所在的位置
.空地

注意每个位置的东西只能是以上四种之一。

机器人的初始位置是给定的,方向朝上,地图外都是墙。

小β\betaβ完成移动后,所有箱子都必须移动过,小α\alphaα需要让这个地图的箱子数最多,且小β\betaβ每步操作都合法。

以下给出所有不合法的操作:

操作不合法情况
W机器人前方是墙
W机器人前方两格都是箱子
W机器人前方两格分别是箱子和墙
S机器人后方是箱子或墙

小α\alphaα需要一份程序来完成这份工作。

输入格式

本题有多组数据。

第一行一个正整数TTT表示数据组数。

对于每组数据:

  • 第一行两个整数n,mn,mn,m。
  • 第二行三个整数x,y,kx,y,kx,y,k。
  • 第三行一个长度为kkk的字符串sss。

输入的数据含义如下:

  • nnn和mmm代表需要构造的地图的大小为nnn行mmm列。
  • xxx和yyy代表机器人的初始位置在从上往下第xxx行从左往右第yyy列。
  • kkk代表移动路径的长度,sss代表移动路径。

本题数据量较大,请使用较快的读写方式。

输出格式

对于每组数据,你需要给出一个n×mn\times mn×m的地图代表你构造的地图,格式如题目描述所述。

所有最优的答案都可以得分。

输入输出样例 #1

输入 #1

1 3 4 2 2 17 DWSAWDWSSDWAWDWAW

输出 #1

..S. SXS. ..S.

输入输出样例 #2

输入 #2

1 3 4 3 4 9 WSAWWDWDW

输出 #2

|.|. |SSS ..SX

输入输出样例 #3

输入 #3

1 3 4 2 1 8 DWASDWAW

输出 #3

||.| XS.| |.S.

输入输出样例 #4

输入 #4

2 5 4 5 1 9 WDWAWDWAW 5 19 5 8 12 DDSAADDADADW

输出 #4

.... ..S. .SS. SS.. X... .........|||||||||| .........||......|| ||||||...||......|| ||..||...||......|| ||||||.X.||||||||||

说明/提示

部分样例有其他正确答案。

「数据范围」

本题开启 Special Judge 与捆绑测试。

一个测试点内,如果对于每组数据你的箱子数是最多的,且方案合法,你才能获得该测试点的分数。

只有通过一个子任务内的所有测试点才能得到该子任务的分数。

对于所有测试数据,保证:

  • 1≤n,m≤20001\leq n,m\leq 20001≤n,m≤2000,1≤∑nm≤4×1061\leq \sum nm\leq 4\times 10^61≤∑nm≤4×106。
  • 1≤x≤n1\leq x\leq n1≤x≤n,1≤y≤m1\leq y\leq m1≤y≤m。
  • 1≤k,∑k≤1061\leq k,\sum k\leq 10^61≤k,∑k≤106。
  • si∈{W,A,S,D}s_i\in\{\texttt{W},\texttt{A},\texttt{S},\texttt{D}\}si​∈{W,A,S,D}。
  • 小β\betaβ的移动在空旷地图下一定合法。
子任务n,mn,mn,m∑nm\sum nm∑nm∑k\sum k∑k特殊性质分值
000≤4\leq4≤4≤40\leq 40≤40≤100\leq100≤100无101010
111=45=45=45=2025=2025=2025≤103\leq10^3≤103A101010
222≤200\leq200≤200≤4×104\leq 4\times 10^4≤4×104≤103\leq10^3≤103无202020
333≤1000\leq1000≤1000≤2×106\leq 2\times 10^6≤2×106≤106\leq10^6≤106B151515
444≤1000\leq1000≤1000≤2×106\leq 2\times 10^6≤2×106≤106\leq10^6≤106C202020
555≤2000\leq2000≤2000≤4×106\leq 4\times 10^6≤4×106≤106\leq10^6≤106无252525
  • 特殊性质 A:前进和后退的总次数不超过202020次,且x=y=23x=y=23x=y=23。
  • 特殊性质 B:si∈{W,A,D}s_i\in\{\texttt{W},\texttt{A},\texttt{D}\}si​∈{W,A,D},且只会朝两个方向前进。
  • 特殊性质 C:可放箱子的最大数量为000或111。

尽管比赛中不会返回,我们仍将告诉你 Special Judge 会返回的对应信息,优先级递减。

  • Error: 1:出现规定以外的字符。
  • Error: 2:出生点不在正确的位置。
  • Error: 3:机器人无法前进。
  • Error: 4:机器人无法后退。
  • Error: 5:有箱子没有被推动过。
  • Error: 6:箱子数不是最多的。
  • Correct:测试点通过。

C++实现

#include<bits/stdc++.h>usingnamespacestd;constintN=2003,K=1e6+6;intt,n,m,sx,sy,k,g[N][N];intd[4][2]={{-1,0},{0,1},{1,0},{0,-1}};boolval[N*N],del[N*N];chars[K];intmain(){scanf("%d",&t);while(t--){scanf("%d%d%d%d%d%s",&n,&m,&sx,&sy,&k,s+1);for(inti=1,cnt=0;i<=n;i++)for(intj=1;j<=m;j++)g[i][j]=++cnt,val[g[i][j]]=del[g[i][j]]=0;intx=sx,y=sy,p=0;//x,y存机器人现在的坐标,p存方向del[g[x][y]]=1,g[x][y]=0;//删除起点上的箱子for(inti=1;i<=k;i++){if(s[i]=='A')p=(p+3)%4;//左转elseif(s[i]=='D')p=(p+1)%4;elseif(s[i]=='W'){intxx=x+d[p][0],yy=y+d[p][1];if(g[xx][yy]){intxxx=xx+d[p][0],yyy=yy+d[p][1];if(0<xxx&&xxx<=n&&0<yyy&&yyy<=m)del[g[xxx][yyy]]=1,g[xxx][yyy]=g[xx][yy],val[g[xx][yy]]=1;elsedel[g[xx][yy]]=1;g[xx][yy]=0;}x=xx,y=yy;}elseif(s[i]=='S'){intxx=x+d[(p+2)%4][0],yy=y+d[(p+2)%4][1];if(g[xx][yy])del[g[xx][yy]]=1,g[xx][yy]=0;x=xx,y=yy;//后退,有箱子删}}for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){if(i==sx&&j==sy)printf("X");//起点要特判elseprintf("%c",val[(i-1)*m+j]&&!del[(i-1)*m+j]?'S':'.');}puts("");}}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 11:47:15

成语小秀才微信小程序源码拆解:答题闯关与题库设计实践

简介&#xff1a;这是以成语接龙为主题的微信小程序完整源码&#xff0c;面向对小程序开发感兴趣、希望学习游戏化设计与广告变现的开发者。项目实现了无限关卡玩法、横幅/激励视频/插屏广告集成、分享好友获能力等机制&#xff0c;可直观看到前端交互与后端接口配合方式。压缩…

作者头像 李华
网站建设 2026/10/14 11:47:08

YOLOv8道路病害检测系统:裂缝坑槽结构化识别+Vue+Flask全栈部署

简介&#xff1a;本资源是一套基于YOLOv8开发的道路病害智能检测平台完整实现方案&#xff0c;面向计算机、人工智能、交通工程等专业学生及初学者&#xff0c;解决道路裂缝、坑槽等典型病害的自动化识别与可视化展示问题&#xff0c;适用于课程设计、毕业设计、项目立项演示及…

作者头像 李华
网站建设 2026/10/14 11:46:39

Windows平台Linphone编译实战:MinGW工具链与依赖管理避坑指南

1. 为什么要在Windows上折腾Linphone编译 Linphone这套开源VoIP方案&#xff0c;做实时音视频通信的同行应该都不陌生。它覆盖了SIP信令、音视频编解码、NAT穿透、通话录制等一整套能力&#xff0c;桌面端、移动端、嵌入式都能跑。但问题也恰恰出在这里——它的构建体系是典型的…

作者头像 李华
网站建设 2026/10/14 11:46:14

金融与文明:从历史看金融工具的本质与演变

1. 金融与文明的双螺旋结构第一次翻开《千年金融史》时&#xff0c;我被序言里的一句话击中&#xff1a;"当考古学家发现某个远古部落的黏土板上刻着债务记录时&#xff0c;金融史就开始了。"这彻底颠覆了我对金融的认知——它从来不是华尔街的专属品&#xff0c;而是…

作者头像 李华
网站建设 2026/10/14 11:46:08

三天入门机器学习十大算法:从理论到实战的完整指南

1. 三天吃透十大算法的可行性拆解先把话说在前头&#xff1a;三天从零到“精通”机器学习&#xff0c;这个说法本身就有水分。我带过不少刚入行的朋友&#xff0c;也见过太多人卡在“教程看完了&#xff0c;代码跑通了&#xff0c;换个数据集就懵了”的状态。所以这篇内容不打算…

作者头像 李华
网站建设 2026/10/14 11:44:55

飔拓skill接入小米水滴平台:智能家居语音交互技能开发与语义理解实战

1. 从一条技能上线消息说起&#xff1a;语音交互的“最后一公里”到底卡在哪 智能家居喊了这么多年&#xff0c;真正每天在用的功能其实就那么几个&#xff1a;开灯、关灯、调空调、查天气。但你会发现一个很尴尬的现象——设备越多&#xff0c;语音控制反而越不好用。不是识别…

作者头像 李华