细节大模拟。

题意

一堆机器人在一起,每个人有左右手和一些指令,依次执行并输出结果。

做法

首先这种指令的执行还算是比较简单的大模拟,一个个实现即可,在此给出我的定义。

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),肯定不是触发的,做一个标记即可判断,详见代码。

至此为止就可以通过这题了。

代码

说实话大模拟的代码作用不大,但也可以看看我的实现方法,自认为代码比较短。

code.

P9966 [THUPC 2024 初赛] 机器人 题解的更多相关文章

  1. cojs 疯狂的重心 疯狂的机器人 题解报告

    疯狂的重心 话说做过幻想乡战略游戏的人应该很容易切掉这道题目吧 我们考虑一棵树如果添加了一个叶子,那么其重心最多向叶子方向移动1的距离 而是否移动我们只需要记录子树中有多少个点就可以判断啦 也就是说这 ...

  2. 序列变换(Lis变形)

    序列变换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. 【BZOJ3993】星际战争(网络流,二分答案)

    [BZOJ3993]星际战争(网络流,二分答案) 题面 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团 ...

  4. 【BZOJ3993】[SDOI2015]星际战争 二分+最大流

    [BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...

  5. BZOJ3993 [SDOI2015]星际战争 【二分 + 网络流】

    题目 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值减少到 ...

  6. bzoj3993: [SDOI2015]星际战争(二分+最大流)

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

  7. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...

  8. luogu P1126 机器人搬重物 题解

    luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...

  9. 【题解】APIO2013机器人

    其实这题前前后后的思考时间加起来应该有两天之久了,dp状态,转移方式等等都还是比较好想,然而左看右看觉得spfa复杂度未免太爆炸……然后选择看了一篇题解,发现在多重优化之下,其实是可以过的…… 首先建 ...

  10. 【题解】#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT)

    [题解]#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现, ...

随机推荐

  1. SpringBoot整合ip2region实现使用ip监控用户访问地域来源

    举个栗子 最*,多*台都上线了展示*期发帖所在地功能,比如抖音.微博.百度,像下面那样: 那么这个功能都是如何实现的呢? 一般有两个方法:GPS 定位的信息和用户 IP 地址. 由于每个手机都不一定会 ...

  2. VS2019 添加三方文件夹遇到的坑

    在开发新项目时需要用到一些三方 API,这些三方 API 没有生成 lib,所以我们在 VS 编译器中添加这些三方文件夹的头文件路径后 会出现 ERROR LNK2019 的错误提示,这些提示通常都是 ...

  3. Hi3516开发笔记(七):Hi3516虚拟机交叉开发环境搭建之交叉编译Qt

    海思开发专栏 上一篇:<Hi3516开发笔记(六):通过HiTools使用USB/串口将uboot.kernel.rootfs和userdata按照分区表烧写镜像>下一篇:<Hi35 ...

  4. 异常处理try...except...finally---day26

    1.认识异常处理 # ### 认识异常处理 #IndexError 索引超出序列范围 #lst = [1,2,3,4] #print(lst[10]) #KeyError 字典中查找一个不存在的关键字 ...

  5. 探索浏览器录屏Web API 接口的应用前景与限制

    一.浏览器录屏Web API 接口的优点: 简化录屏流程:浏览器录屏Web API 接口可以直接在网页中调用,无需安装额外的插件或软件,简化了录屏的流程. 实时录制与传输:Web API 接口可以实时 ...

  6. Toyota Programming Contest 2024#2(AtCoder Beginner Contest 341)D - Only one of two(数论、二分)

    目录 链接 题面 题意 题解 代码 总结 链接 D - Only one of two 题面 题意 求第\(k\)个只能被\(N\)或\(M\)整除的数 题解 \([1,x]\)中的能被\(n\)整除 ...

  7. Java核心之细说泛型

    泛型是什么? 等你使用java逐渐深入以后会了解或逐步使用到Java泛型.Java 中的泛型是 JDK 5 中引入的功能之一."Java 泛型 "是一个技术术语,表示一组与定义和使 ...

  8. springboot参数据校验

    什么是Hibernate Validator? Hibernate Validator是Hibernate提供的一个开源框架,使用注解方式非常方便的实现服务端的数据校验. 官网:http://hibe ...

  9. react 修改页面title - react-document-title

    安装 cnpm install --save react-document-title 引用 import DocumentTitle from 'react-document-title' 代码 & ...

  10. c语言中float和double类型的区别

    1.变量bai类型不同 float属于单du精度zhi型浮点数据. double属于双精度型浮点数据. 2.指数范围不同 float的指数范围为-127~128. double而double的指数范围 ...