记一道弱智题

news/2024/12/26 23:05:19/文章来源:https://www.cnblogs.com/CYLSY/p/18305920

P2033 Chessboard Dance

今天集训第四天,遇到这道模拟题。

我搞错了一大问题。首先我以为移动是整行移动,但显然不是的。于是我就开始想这个怎么处理:
image

我想是先碰到之后让箱子作为P,继续往后推,再碰到箱子……最后回溯。这是可怕的递归,函数是 MOVE(x, y, Steps_rem)。奈何码力不足,写了一下午。

回家之后就会了 😅,其实递归是可以的,但其实只需要走一步,不需要搞一个Step变量,纯粹是问题复杂化。

但是呢,也有一些东西要注意:平面坐标系和数组意义的坐标系是不一样的,把人烦死。

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define CHECK cout<<"WALKED"<<endl;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0' && ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
ll qpow(ll a, ll b, ll mod){ll res = 1;  while (b > 0){if (b & 1) res = res * a % mod;a = a * a % mod;  b >>= 1;  }  return res;}
using namespace std;char mp[100][100];
string opt, optf;
struct Person {int x, y;int dx, dy;
}P;bool check(int tx, int ty) 
{if (tx >= 1 && tx <= 8 && ty >= 1 &&ty <= 8) return true;return false;
}void MOVE(int nowx, int nowy)
{int nx = nowx + P.dx;int ny = nowy + P.dy;if (!check(nx, ny))return;if (mp[nx][ny] != '.') {MOVE(nx, ny);}mp[nx][ny] = mp[nowx][nowy];mp[nowx][nowy] = '.';P.x = nx;P.y = ny;
}int main()
{for (int i = 1; i <= 8; i++)for (int j = 1; j <= 8; j++) {cin >> mp[i][j];if (mp[i][j] == '^') P = {i, j, -1, 0};else if (mp[i][j] == '<') P = {i, j, 0, -1};else if (mp[i][j] == 'v') P = {i, j, 1, 0};else if (mp[i][j] == '>') P = {i, j, 0, 1};}int n;while (true){opt = "", optf = "";cin >> opt;if (opt == "#") break;if (opt == "turn") cin >> optf;if (opt == "move") cin >> n;if (opt == "move") {for (int i = 1; i <= n; i++) {MOVE(P.x, P.y);}}if (optf == "left") {if (P.dx == -1 && P.dy == 0) P.dx = 0, P.dy = -1;else if (P.dx == 0 && P.dy == -1) P.dx = 1, P.dy = 0;else if (P.dx == 1 && P.dy == 0) P.dx = 0, P.dy = 1;else if (P.dx == 0 && P.dy == 1) P.dx = -1, P.dy = 0;}else if (optf == "right") {if (P.dx == -1 && P.dy == 0) P.dx = 0, P.dy = 1;else if (P.dx == 0 && P.dy == 1) P.dx = 1, P.dy = 0;else if (P.dx == 1 && P.dy == 0) P.dx = 0, P.dy = -1;else if (P.dx == 0 && P.dy == -1) P.dx = -1, P.dy = 0;}else if (optf == "back") {if (P.dx == 1 && P.dy == 0) P.dx = -1, P.dy = 0;else if (P.dx == 0 && P.dy == 1) P.dx = 0, P.dy = -1;else if (P.dx == -1 && P.dy == 0) P.dx = 1, P.dy = 0;else if (P.dx == 0 && P.dy == -1) P.dx = 0, P.dy = 1;}}for (int i = 1; i <= 8; i++) {for (int j = 1; j <= 8; j++) {if (i == P.x && j == P.y) {if (P.dx == 1 && P.dy == 0) cout << 'v';else if (P.dx == 0 && P.dy == 1) cout << '>';else if (P.dx == -1 && P.dy == 0) cout << '^';else if (P.dx == 0 && P.dy == -1) cout << '<';continue;}cout << mp[i][j];}cout<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/744842.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【THM】Pickle Rick练习

脚本小子是这样的,黑客只要写POC就可以,可是脚本小子要考虑的事情就多了。【THM】Pickle Rick练习 与本文相关的TryHackMe实验房间链接:TryHackMe | Room details 简介:瑞克和莫蒂 CTF。 帮助瑞克变回人类!这个以瑞克和莫蒂为主题的挑战要求你利用网络服务器,找到三种材料…

乒乓球比赛计分系统需求流程

计应222_杜晓瑾_2210502012 乒乓球比赛计分系统需求流程 1、产品愿景: 我们的产品乒乓球比赛计分系统是为了解决乒乓球运动员、裁判、教练、爱好者、普通用户等人的问题,他们可以使用乒乓球计分器软件,在登录后可随时查看以往记录,进行对比,但是现有的计分器不能达到他们的…

腾讯特别调薪8%,年底十三薪分摊到月薪:福利升级还是另有深意?

腾讯公司对校招生房补和员工服务奖的薪酬政策做出调整,此消息引发广泛关注和热烈讨论,有正面评价如激励和跳槽优势,也有负面如变相降薪、新员工福利降低和个税增多等争议。近日,一则关于腾讯公司薪酬政策调整的消息在业内外引起了不小的震动。据悉,腾讯宣布把校招生的房补…

Day 6

References:Python教学29期(强烈推荐) : Day6 今日内容介绍 , 可变不可变类型 , 条件判断 , 逻辑运算符与优先级 , 成员运算与身份运算 , if今日内容

编写VCS运行使用的makefile遇到的问题

企图在makefile中直接使用之前的cshrc脚本中定义的alias的别名,但是一直报错 Command not found。查询发现makefile并不支持alias。 所以将alias的别名和值都复制到makefile中,去掉alias 加上等号。 后面使用$符号调用。Linux下makefile不支持alias命令_makefile alias-CSDN博…

说说RabbitMQ延迟队列实现原理?

使用 RabbitMQ 和 RocketMQ 的人是幸运的,因为这两个 MQ 自身提供了延迟队列的实现,不像用 Kafka 的同学那么苦逼,还要自己实现延迟队列。当然,这都是题外话,今天咱们重点来聊聊 RabbitMQ 延迟队列的实现原理,以及 RabbitMQ 实现延迟队列的优缺点有哪些?很多人知道使用 …

如何在上传文件到 COS 时同步获取文件信息

本文将介绍如何在上传文件到 COS 时同步获取文件信息,如图片的宽高、格式等。目前,可以通过 COS 上传接口,如 PUT Object、CompleteMultipartUploads 等将文件存储至 COS 存储桶中,我们针对以下三种场景提供上传时同步获取文件信息的方式背景介绍 本文将介绍如何在上传文件…

【C++】cmath

1、头文件 #include <cmath>2、幂函数

SRAM CIM的后续发展之我见

SRAM CIM的后续发展之我见 目前CIM技术已经应用在诸多存储器上,如主流存储器SRAM,DRAM,Flash,以及新型NVM,如RRAM,PCM,FeRAM,MRAM等。其中SRAM CIM是一个进展较快的方向,主要受益于其工艺上的成熟性,与CMOS先进工艺的高度兼容,并且SRAM的高速度也是SRAM CIM性能上的…

springboot+vue前后端分离项目-项目搭建13-树形表

效果一、后端 1. 新建表category 2.新建entity,com/example/demo/entity/Category.java3.新建Mapper,com/example/demo/mapper/CategoryMapper.java 4.新建Controller,com/example/demo/controller/CategoryController.java 主要代码逻辑如下, 封装成List<Category>,…

阶跃星辰启动「繁星计划」开放平台;运动迁移框架 MotionClone 无需训练,一键克隆视频运动丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点…