P3695 CYaRon!语

开始之前

上次水了些小模拟之后感觉不能再颓废了,于是就来大模拟。

然后这个题花了我一个多星期

还是最差解

不过,为了纪念我的第 20 道紫题,纪念我这一周的努力,我还是想写篇题解,记录我的一点一滴。

大致思路

模拟题,都是根据题意直接模拟的(雾。

这个题呢,就适合分步完成。

关于变量

用的变量大都是汉语拼音或者缩写或者半缩写(比较好调)。

有些地方没加注释就可以直接读拼音理解含义。

成长过程

一 . 输出,变量,赋值

刚开始我是这么想的:

先把变量、数组和赋值、输出打完。

  1. 输出

    直接将表达式的值计算出来输出即可。

  2. 变量和数组

    用到了两个 map,用来映射 string 和 int 或者 array 之间的关系。

  3. 赋值

    和输出差不多,将变量名储存下来,计算出后边表达式的值即可。

具体看代码

显然这个 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

ihuhor 打完之后,while 就很好打了。

因为 while 完全就是 ihuhor 的结合体。

顺便又修改了一下 js 函数。

修复了之前说的数组下标是变量时的错误。

还完善了对于循环中的 ihu 的跳过处理。

代码

可以发现,这时的 zhixing 函数有了返回值。

这是为了判断 ihu 是否需要跳过。

而且此时的 duiy 函数的统计方式也变成了由大括号直接统计,而不是通过 hor 统计。

交上之后,80 分了,两个 TLE。

六 .set

通过下载数据,可以发现,#6 的 set 的变量和数值之间没有空格,这就导致了我的处理出现奇奇怪怪的错误(我的处理是按照空格划分的)。

既然这样,反正 set 中的 , 是绝对有的,那么就根据这个 , 划分变量。

AC Code

七 . 数组

“你的 vector 怎么实现的?”

“就直接用啊。”

“那它如果直接是一个 9?”

“嗯?哦,我先 push_back 了 1000 个 0。”

“那你?”

“好像是哦。”

虽然这个对话有些奇怪,但我们两个都 get 到了对方的意思。

于是我就把 vector 换成了 int 数组。

其实差不多(反正都是最差解)。

AC Code

含调试过程的代码

总结

个人感觉这种紫色的大模拟对于代码能力的锻炼还是很有用的。

除了过程有点折磨外,A 掉之后还是很开心的。

如果对于我的代码疑问,可以私信问我。

2022 年 noip 后就要退役了。退役前还是能回复的。

大学之后可能会是不是上洛谷或博客园看看。

如果觉得这篇题解写的还可以,请不要吝啬您的点赞。

广告

博客园

CYaRon!语的更多相关文章

  1. 洛谷 P3695 CYaRon!语 题解 【模拟】【字符串】

    大模拟好啊! 万一远古计算机让我写个解释器还真是得爆零了呢. 题目背景 「千歌です」(我是千歌).「曜です」(我是曜).「ルビィです」(我是露比).「3人合わせて.We are CYaRon! よろし ...

  2. NOIP2017酱油记

    分数线终于出了,于是大胆地写下了这篇博文. 提高组Day1: T1: 打开PDF就感觉到一股骚气,不忘初心什么鬼啊??T1是数论??好一个不忘初心... 看一下样例1:3 7:11 莫不是3*7-10 ...

  3. REHの收藏列表

    搬运自本人的AcWing,所以那里的文章会挺多. 友链(同类文章) :bztMinamoto 世外明月 mlystdcall 新人手册:AcWing入门使用指南 前言 有看到好文欢迎推荐(毛遂自荐也可 ...

  4. 编译器开发系列--Ocelot语言1.抽象语法树

    从今天开始研究开发自己的编程语言Ocelot,从<自制编译器>出发,然后再自己不断完善功能并优化. 编译器前端简单,就不深入研究了,直接用现成的一款工具叫JavaCC,它可以生成抽象语法树 ...

  5. 从游戏脚本语言说起,剖析Mono所搭建的脚本基础

    0x00 前言 在日常的工作中,我偶尔能遇到这样的问题:“为何游戏脚本在现在的游戏开发中变得不可或缺?”.那么这周我就写篇文章从游戏脚本聊起,分析一下游戏脚本因何出现,而mono又能提供怎样的脚本基础 ...

  6. [转载]jquery版小型婚礼(可动态添加祝福语)

    原文链接:http://www.cnblogs.com/tattoo/p/3788019.html 前两天在网上不小心看到“js许愿墙”这几个字,我的神经就全部被调动了.然后就开始我 的百度生涯,一直 ...

  7. C语言中,头文件和源文件的关系(转)

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...

  8. h5输入框提示语 + 正常文本框提示语

    <input id="username" name="username" type="text" placeholder=" ...

  9. C 语言中 setjmp 和 longjmp

    在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...

随机推荐

  1. Vue整合Quill富文本编辑器

    Quill介绍 Quill是一款开源的富文本编辑器,基于可扩展的架构设计,提供丰富的 API 进行定制.截止2021年1月,在github上面已有28.8k的star. Quill项目地址:https ...

  2. C++---条件结构和循环结构

    条件结构 if结构 #include <iostream> using namespace std; int main() { //判断用户输入的字符是否是合法的硬盘盘符A-Z char ...

  3. what 的页面制作

    1. html结构 <!-- section: what we do --> <section id="what" class="bg-light py ...

  4. HCNP Routing&Switching之MUX VLAN

    前文我们了解了代理ARP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16188230.html:今天我们再来聊一聊vlan隔离相关话题MUX VLA ...

  5. R 数据可视化: PCA 主成分分析图

    简介 主成分分析(Principal Component Analysis,PCA)是一种无监督的数据降维方法,通过主成分分析可以尽可能保留下具备区分性的低维数据特征.主成分分析图能帮助我们直观地感受 ...

  6. HMS Core分析服务助您掌握用户分层密码,实现整体收益提升

    随着市场愈发成熟,开发者从平衡收益和风险的角度开始逐步探索混合变现的优势,内购+广告就是目前市场上混合变现的主要方式之一. 对于混合变现模式,您是否有这样的困惑: 如何判断哪些用户更愿意看广告.哪些用 ...

  7. MongoDB排序时内存大小限制和创建索引的注意事项!

    线上服务的MongoDB中有一个很大的表,我查询时使用了sort()根据某个字段进行排序,结果报了下面这个错误: [Error] Executor error during find command ...

  8. 那些我懵懵懂懂的js

    1.this 如果说this是代表当前对象,而js中,除原始值(var str = "Leonie",值Leonie是不能改变的,它就是一个字符串,如var num = 4, 4也 ...

  9. 推荐一款数据mock框架,无需任何依赖,贼牛逼

    fox-mock 是基于Java Agent实现的自测,联调Mock利器.能解决你的这些问题: 开发过程中,依赖了下游多个接口,想跑个单测都必须得等下游把服务部署好 联调过程中,下游某个接口出问题,阻 ...

  10. WPF 制作雷达扫描图

    实现一个雷达扫描图. 源代码在TK_King/雷达 (gitee.com),自行下载就好了 制作思路 绘制圆形(或者称之轮) 绘制分割线 绘制扫描范围 添加扫描点 具体实现 首先我们使用自定义的控件. ...