P9966 [THUPC 2024 初赛] 机器人 题解
细节大模拟。
题意
一堆机器人在一起,每个人有左右手和一些指令,依次执行并输出结果。
做法
首先这种指令的执行还算是比较简单的大模拟,一个个实现即可,在此给出我的定义。
struct Robot{
int l_hand,r_hand,lst[15];
}bot[105];
struct Order{
string name;
int h,x,y,z,id;
string cmdname;//trigger 触发条件
Order(){name=cmdname="";h=x=y=z=id=0;}
};
vector<Order> U;//所有命令
我将所有的命令统一存放在一起,便于后期使用。
然后讲讲读入问题,因为可能存在超长的嵌套,所以采用递归的形式进行读入。
Order Analyze(){
Order res; string s,cmd,cname; cin>>s;
int H,X,Y,Z; res.name=s;
if(s[1]=='O') cin>>H>>Z,res.h=H,res.z=Z;
else if(s[1]=='W') cin>>H>>X>>Y,res.h=H,res.x=X,res.y=Y;
else if(s[1]=='I') cin>>H>>X,res.h=H,res.x=X;
else if(s[1]=='C') cin>>H,res.h=H;
else if(s[1]=='E') {
cin>>H>>X,res.h=H,res.x=X;
Order cmd=Analyze(); U.push_back(cmd);
res.id=int(U.size())-1;
}else if(s[1]=='R'){
cin>>cname;cname.pop_back();res.cmdname=cname;
Order cmd=Analyze();U.push_back(cmd);
res.id=int(U.size())-1;
}
return res;
}
另外,在这里你可能关注到了我的判断方式,这种写法考场不容易写错,也能减小常数,因为 string 的比较还是很费时的,当然在这题命令不长也无所谓。
之后就是具体实现每个操作了,因为其他操作都很简单,在这里就解释部分坑点,难点。
MIRROR 操作
对于不是 TRIGGER 的操作还是简单的直接取反即可,但是对 TRIGGER 的操作,因为要考虑到一个指令不一定只有一个人在用,所以不能直接对原指令搞,而要另外拷贝一个。
REPLACE 操作
其实和 MIRROR 一样,使用拷贝即可。
TRIGGER 操作
其实说的是怎么判断一个操作是不是被触发而来的。
首先,你自己调用的(或 ACTIVATE),肯定不是触发的,做一个标记即可判断,详见代码。
至此为止就可以通过这题了。
代码
说实话大模拟的代码作用不大,但也可以看看我的实现方法,自认为代码比较短。
P9966 [THUPC 2024 初赛] 机器人 题解的更多相关文章
- cojs 疯狂的重心 疯狂的机器人 题解报告
疯狂的重心 话说做过幻想乡战略游戏的人应该很容易切掉这道题目吧 我们考虑一棵树如果添加了一个叶子,那么其重心最多向叶子方向移动1的距离 而是否移动我们只需要记录子树中有多少个点就可以判断啦 也就是说这 ...
- 序列变换(Lis变形)
序列变换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 【BZOJ3993】星际战争(网络流,二分答案)
[BZOJ3993]星际战争(网络流,二分答案) 题面 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团 ...
- 【BZOJ3993】[SDOI2015]星际战争 二分+最大流
[BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
- BZOJ3993 [SDOI2015]星际战争 【二分 + 网络流】
题目 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值减少到 ...
- bzoj3993: [SDOI2015]星际战争(二分+最大流)
题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...
- 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解
题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...
- luogu P1126 机器人搬重物 题解
luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...
- 【题解】APIO2013机器人
其实这题前前后后的思考时间加起来应该有两天之久了,dp状态,转移方式等等都还是比较好想,然而左看右看觉得spfa复杂度未免太爆炸……然后选择看了一篇题解,发现在多重优化之下,其实是可以过的…… 首先建 ...
- 【题解】#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT)
[题解]#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现, ...
随机推荐
- Vue+SpringBoot+ElementUI实战学生管理系统-1.项目介绍
1.项目介绍 前段时间有位老铁问老徐有没有Vue+SpringBoot+ElementUI前后分离的项目想学习下,抱歉前端时间有点忙.千呼万唤始出来,做得不是很到位,需要的朋友可以拿去自己定制.:) ...
- 使用DeskPins工具钉住窗口
需求 我们经常一边看着PDF或视频教程,一边又打开一个文本编辑器/word/markdown编辑器在做一些笔记.问题是有时候呀需要来回切换(alt+tab)窗口,时间长了其实费时费力,这是一名工程师无 ...
- 使用xampp安装部署mantis
快速教程请参考: 点击打开链接 http://download.csdn.net/detail/indexman/6830003 --------------------------- Dylan ...
- 执行shell脚本过程中传递参数
假设我有一个shell脚本install.sh,在运行过程中需要终端输入一条指令才能继续执行,例如程序询问是否删除某文件,终端需要输入Y/N.采用下面的方式可以实现自动输入参数,无需人工干预: ech ...
- python第五章pta习题总结
四.编程部分 1.sorted函数: sorted(iterable, cmp=None, key=None, reverse=False) #iterable:可迭代的对象 #cmp:比较规则 #k ...
- 《系列二》-- 6、从零开始的 bean 创建
目录 createBean() 的面纱 createBean() 的承包者: doCreateBean() 总结 阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看 ...
- 公司服务器建站笔记(三):腾讯云服务器CentOS8.2安装界面环境,使用vnc远程登陆并搭建轻量级Qt服务器
前言 有些小项目可能只有几个点,几十个点,几百个点,这个时候使用qt的tcp服务器或者mqtt或者websocket等相关服务就可以满足,腾讯云CentOs8.2服务器安装的是没有界面的版本,本篇 ...
- Vue框架设计:性能权衡的艺术
"框架设计里到处都体现了权衡的艺术." 当我们设计一个框架的时候,框架本身的各个模块之间并不是相互独立的,而是相互关联.相互制约的.因此作为框架设计者,一定要对框架的定位和方向拥有 ...
- Google Test Adapter安装
背景 我有一个vs2015 的gtest 工程,编译完成后,需要gtest adapter帮我把测试列表显示出来,但是通过vs自带的工具或者网页下载安装遇到2个问题: 1.下载速度超级慢,慢到我能到火 ...
- 【Azure Redis 缓存】对于Azure Redis 从 Redis 4 升级到 Redis 6 的一些疑问
问题描述 使用Azure Redis服务,客户端使用Redisson 3.X , 在近期Microsoft Azure对Redis服务进行大规模变动升级( Redis 版本由 4 升级到 6),对于这 ...