CYaRon!语
P3695 CYaRon!语
开始之前
上次水了些小模拟之后感觉不能再颓废了,于是就来大模拟。
然后这个题花了我一个多星期
还是最差解
不过,为了纪念我的第 20 道紫题,纪念我这一周的努力,我还是想写篇题解,记录我的一点一滴。
大致思路
模拟题,都是根据题意直接模拟的(雾。
这个题呢,就适合分步完成。
关于变量
用的变量大都是汉语拼音或者缩写或者半缩写(比较好调)。
有些地方没加注释就可以直接读拼音理解含义。
成长过程
一 . 输出,变量,赋值
刚开始我是这么想的:
先把变量、数组和赋值、输出打完。
输出
直接将表达式的值计算出来输出即可。
变量和数组
用到了两个 map,用来映射 string 和 int 或者 array 之间的关系。
赋值
和输出差不多,将变量名储存下来,计算出后边表达式的值即可。
具体看代码。
显然这个 js 是不对的,没有判断减法,:yosoro 2-1 都是错的。
数组的处理也有些错误。
得了 20 分。
但我当时没在意,就去打 ihu 了。
二 .ihu
我对 ihu 想的很简单,没考虑循环的情况。
如果 ihu 合法,就顺序执行;否则,就将更深层数的读入,跳过。
层数的定义大概就是每遇到一个 { 层数 +1,遇到 } 层数 -1。
然后又小改了一下 js,完善了减法的维护。
事实证明,我的 ihu 思路上没什么大错误。
30 分。
三 . 数组
之后我看了数据那张图。
就这个:

“不对啊,应该是 50 吗?”
然后就开始调试数组。
我就发现 js 用递归的话,ls 是个全局变量,会被清空。
然后我就直接当数字计算了……
没考虑数组下标是变量的情况。
不过,50 分就这么到手了……
四 .hor
从这开始,就开始有些恶心了。
因为要重复操作,顺序操作可能不好弄,所以这里选择了递归。
用了一个 zhixing 函数,将更深层数的操作储存下来。用循环递归处理。
但是因为是一些奇奇怪怪的原因,main 函数中的 zhixing 是以读入的形式执行的,而递归时则是以储存的形式执行的。
所以要有一些判断,将读入或是储存的代码统一起来。
但这样只能执行单层循环,不能嵌套(不管是嵌套循环还是 ihu)。
而原因呢,就是因为如果循环之中嵌套循环,递归执行到下一次循环时,又会执行 getline 函数。
那么加一个判断条件,如果是第一次循环(严格来说是最外层循环),就将更深层次的存下来;否则就从之前储存的代码中找到要执行的语句。
关于 duiy 的用处,举一个简单的例子:
{ vars
a:int
b:int
}
{ hor a, 1, 2
{ hor b, 1, 2
:yosoro b
}
}
不加 duiy 的输出:
1 2 0 1 2 0
加 duiy 的输出:
1 2 1 2
如果将循环执行的语句 顺序 输出的话,那么不加 duiy 的应该是这样的(仅 hor 循环):
{ hor a, 1, 2
{ hor b, 1, 2
:yosoro b
}
{ hor b, 1, 2
:yosoro b
}
:yosoro b
{ hor b, 1, 2
:yosoro b
}
{ hor b, 1, 2
:yosoro b
}
:yosoro b
}
也就是说,循环结束之后又顺序执行了一遍循环体。
应该……不难理解吧。
感性理解一下吧。
然后就 60 分了。
这里的 duiy 统计比较浅显,没有考虑 ihu 的不成立时跳过和 while 语句。
五 .while
ihu 和 hor 打完之后,while 就很好打了。
因为 while 完全就是 ihu 和 hor 的结合体。
顺便又修改了一下 js 函数。
修复了之前说的数组下标是变量时的错误。
还完善了对于循环中的 ihu 的跳过处理。
可以发现,这时的 zhixing 函数有了返回值。
这是为了判断 ihu 是否需要跳过。
而且此时的 duiy 函数的统计方式也变成了由大括号直接统计,而不是通过 hor 统计。
交上之后,80 分了,两个 TLE。
六 .set
通过下载数据,可以发现,#6 的 set 的变量和数值之间没有空格,这就导致了我的处理出现奇奇怪怪的错误(我的处理是按照空格划分的)。
既然这样,反正 set 中的 , 是绝对有的,那么就根据这个 , 划分变量。
七 . 数组
“你的 vector 怎么实现的?”
“就直接用啊。”
“那它如果直接是一个 9?”
“嗯?哦,我先 push_back 了 1000 个 0。”
“那你?”
“好像是哦。”
虽然这个对话有些奇怪,但我们两个都 get 到了对方的意思。
于是我就把 vector 换成了 int 数组。
其实差不多(反正都是最差解)。
总结
个人感觉这种紫色的大模拟对于代码能力的锻炼还是很有用的。
除了过程有点折磨外,A 掉之后还是很开心的。
如果对于我的代码疑问,可以私信问我。
2022 年 noip 后就要退役了。退役前还是能回复的。
大学之后可能会是不是上洛谷或博客园看看。
如果觉得这篇题解写的还可以,请不要吝啬您的点赞。
广告
CYaRon!语的更多相关文章
- 洛谷 P3695 CYaRon!语 题解 【模拟】【字符串】
大模拟好啊! 万一远古计算机让我写个解释器还真是得爆零了呢. 题目背景 「千歌です」(我是千歌).「曜です」(我是曜).「ルビィです」(我是露比).「3人合わせて.We are CYaRon! よろし ...
- NOIP2017酱油记
分数线终于出了,于是大胆地写下了这篇博文. 提高组Day1: T1: 打开PDF就感觉到一股骚气,不忘初心什么鬼啊??T1是数论??好一个不忘初心... 看一下样例1:3 7:11 莫不是3*7-10 ...
- REHの收藏列表
搬运自本人的AcWing,所以那里的文章会挺多. 友链(同类文章) :bztMinamoto 世外明月 mlystdcall 新人手册:AcWing入门使用指南 前言 有看到好文欢迎推荐(毛遂自荐也可 ...
- 编译器开发系列--Ocelot语言1.抽象语法树
从今天开始研究开发自己的编程语言Ocelot,从<自制编译器>出发,然后再自己不断完善功能并优化. 编译器前端简单,就不深入研究了,直接用现成的一款工具叫JavaCC,它可以生成抽象语法树 ...
- 从游戏脚本语言说起,剖析Mono所搭建的脚本基础
0x00 前言 在日常的工作中,我偶尔能遇到这样的问题:“为何游戏脚本在现在的游戏开发中变得不可或缺?”.那么这周我就写篇文章从游戏脚本聊起,分析一下游戏脚本因何出现,而mono又能提供怎样的脚本基础 ...
- [转载]jquery版小型婚礼(可动态添加祝福语)
原文链接:http://www.cnblogs.com/tattoo/p/3788019.html 前两天在网上不小心看到“js许愿墙”这几个字,我的神经就全部被调动了.然后就开始我 的百度生涯,一直 ...
- C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...
- h5输入框提示语 + 正常文本框提示语
<input id="username" name="username" type="text" placeholder=" ...
- C 语言中 setjmp 和 longjmp
在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...
随机推荐
- 深入剖析 RocketMQ 源码 - 负载均衡机制
RocketMQ作为一款流行的消息中间件在各大互联网应用广泛,本文主要分析RocketMq在消息生产和消费过程中的负载均衡机制,并创新提出消费端负载均衡策略的改写以实现固定IP消费的可能.
- MySQL8.0.x 版本安装步骤傻瓜式教程【官方版】
MySQL8.0.x 安装 一.下载 MySQL官网下载链接:https://downloads.mysql.com/archives/community/ 选择版本后下载zip文件 博主选择的是8. ...
- 2021.08.09 P7238 迷失森林(树的直径)
2021.08.09 P7238 迷失森林(树的直径) P7238 「DCOI」迷失森林 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的直径两种求法:两次dfs.树 ...
- python基础练习题(题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少)
day13 --------------------------------------------------------------- 实例021:猴子偷桃 题目 猴子吃桃问题:猴子第一天摘下若干 ...
- css兼容问题集锦
BEGIN; 1.文本框很大,导致里面的内容不居中.以及内容为数字时,不支持text-indent属性 解:line-height: K px; (值为文本框的height值). 2.文本框有背景图片 ...
- 我向PostgreSQL社区贡献的功能:空闲会话超时
经过约八个月的努力,终于完成了 PostgreSQL 空闲会话超时断开的功能. 该功能将在版本 14 中发布. 这是我第一次向 PostgreSQL 提供功能,虽然之前也有向社区提供过补丁,但是这次整 ...
- python学习-Day33
目录 今日内容详细 socket socket套接字简介 socket模块 服务端 客户端 通信循环 服务端 客户端 链接循环 半连接池 概念 产生半连接的两种情况 黏包问题 多次发送被并为一次 TC ...
- postman4.15
测开培训笔记4.15 postman:很主流的API测试工具,也是在工作中使用很广泛的研发工具 queue 队列 先进先出的原则 列如:客户端有100个请求 服务端最多只能承受90个 其余都要排队进行 ...
- 公司官网建站笔记(一):腾讯云服务器装CentOS8.2系统、重置密码、远程ssh登陆、sftp传递文件以及新建开发者账户
前言 本篇使用的是腾讯云服务器,讲解了部署安装服务器CentOS8.2系统,重置密码,添加用户,远程登陆,远程传递文件等基本流程. 前提条件 购买了腾讯云服务器,如下图: 云服务器 ...
- vue3中的四种插槽的介绍-保证让你看看的明明白白!
插槽 当组件中只有一个插槽的时候,我们可以不设置 slot 的 name 属性. v-slot 后可以不带参数,但是 v-slot 在没有设置 name 属性的时候, 插槽口会默认为"def ...