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) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现, ...
随机推荐
- Java设计模式-适配器模式Adapter
介绍 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本 因接口不匹配不能一起工作的两个类可以协同工作.其别名为包装器(Wrapper ...
- CSS之浮动Float
前言 提到浮动,前端的小伙伴肯定都不陌生,但是随着弹性布局等等一些更好用的标准出来后,用在布局方面少了很多,当初我刚开始接触前端的时候,很习惯用浮动来给元素改变定位,当时还并不是很流行flexbox布 ...
- django学习第六天---shell指令,单表基于双下划线的模糊查询,distinct注意点,字段的choices属性,url反向解析,orm多表操作创建表
shell指令 命令 python manage.py shell 在Terminal,执行上面这个指令会进入到python解释器环境中,并且加载了我们当前django项目配置环境,所以可以在当前sh ...
- J-link虚拟串口波特率异常问题
J-LINK V9以上自带了虚拟串口,使用非常方便. 但最近遇到问题,发现打开虚拟串口时电脑接收到的是乱码.到官网搜索了一下,发现最高波特率是115200,我使用的是256000,于是降低波特率. 官 ...
- 【转载】nltk英文自定义分词
NLTK项目地址: https://github.com/nltk/nltk_data/tree/gh-pages/packages NLTK基础分词用例: https://www.cnblogs.c ...
- 【LeetCode二叉树#08】寻找树左下角的值(回溯机制X深度)
找树左下角的值 力扣题目链接(opens new window) 给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 示例 2: 思路 层序遍历 这个是很自然的思路,因为层序遍历可以避免对于& ...
- 华为云峰会2024,GaussDB扬帆出海,给世界一个更优选择
本文分享自华为云社区<华为云峰会2024,GaussDB扬帆出海,给世界一个更优选择>,作者:GaussDB 数据库. 2024年2月26~29日,由GSM协会主办的"2024年 ...
- 我的第一个项目(七):(解决问题)Vue中canvas无法绘制图片
好家伙, 现在,我想要把我的飞机大战塞到我的主页里去,想办法把文件导入 然后,直接死在第一步,图片渲染都成问题 先用vue写一个测试文件 来测试canvas的绘制 <template> ...
- 【Azure Redis 缓存】Azure Redis 异常 - 因线程池Busy而产生的Timeout异常问题
问题描述 StackExchange.Redis在使用线程池后,偶尔会出现Timeout awaiting response 或者 No connection is available to serv ...
- win上vscode出现undefined reference to `__imp_WSACleanup'
示例代码 #include <iostream> // 推荐加上宏定义 #define WIN32_LEAN_AND_MEAN #include <winsock2.h> #i ...