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来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...
随机推荐
- Vue整合Quill富文本编辑器
Quill介绍 Quill是一款开源的富文本编辑器,基于可扩展的架构设计,提供丰富的 API 进行定制.截止2021年1月,在github上面已有28.8k的star. Quill项目地址:https ...
- C++---条件结构和循环结构
条件结构 if结构 #include <iostream> using namespace std; int main() { //判断用户输入的字符是否是合法的硬盘盘符A-Z char ...
- what 的页面制作
1. html结构 <!-- section: what we do --> <section id="what" class="bg-light py ...
- HCNP Routing&Switching之MUX VLAN
前文我们了解了代理ARP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16188230.html:今天我们再来聊一聊vlan隔离相关话题MUX VLA ...
- R 数据可视化: PCA 主成分分析图
简介 主成分分析(Principal Component Analysis,PCA)是一种无监督的数据降维方法,通过主成分分析可以尽可能保留下具备区分性的低维数据特征.主成分分析图能帮助我们直观地感受 ...
- HMS Core分析服务助您掌握用户分层密码,实现整体收益提升
随着市场愈发成熟,开发者从平衡收益和风险的角度开始逐步探索混合变现的优势,内购+广告就是目前市场上混合变现的主要方式之一. 对于混合变现模式,您是否有这样的困惑: 如何判断哪些用户更愿意看广告.哪些用 ...
- MongoDB排序时内存大小限制和创建索引的注意事项!
线上服务的MongoDB中有一个很大的表,我查询时使用了sort()根据某个字段进行排序,结果报了下面这个错误: [Error] Executor error during find command ...
- 那些我懵懵懂懂的js
1.this 如果说this是代表当前对象,而js中,除原始值(var str = "Leonie",值Leonie是不能改变的,它就是一个字符串,如var num = 4, 4也 ...
- 推荐一款数据mock框架,无需任何依赖,贼牛逼
fox-mock 是基于Java Agent实现的自测,联调Mock利器.能解决你的这些问题: 开发过程中,依赖了下游多个接口,想跑个单测都必须得等下游把服务部署好 联调过程中,下游某个接口出问题,阻 ...
- WPF 制作雷达扫描图
实现一个雷达扫描图. 源代码在TK_King/雷达 (gitee.com),自行下载就好了 制作思路 绘制圆形(或者称之轮) 绘制分割线 绘制扫描范围 添加扫描点 具体实现 首先我们使用自定义的控件. ...