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. mycat实现主从读取中的问题

    schema.xml 中的配置如下:..... <dataHost name="aaa" maxCon="2000" minCon="100&q ...

  2. JavaWeb学习day3-Maven&安装

    1.官网下载:https://maven.apache.org/ 2.解压下载好的压缩包 3.配置环境变量 添加如下图变量 在path变量下添加下图 4.安装完成检测 cmd输入:mvn -versi ...

  3. IDEA小技巧:Markdown里的命令行可以直接运行了

    作为一名开发者,相信大部分人都喜欢用Markdown来写文章和写文档. 如果你经常用开源项目或者自己维护开源项目,肯定对于项目下的README文件也相当熟悉了吧,通常我们会在这里介绍项目的功能.如何使 ...

  4. JavaScript学习高级2

    ## DOM:     * 概念: Document Object Model 文档对象模型         * 将标记语言文档的各个组成部分,封装为对象.可以使用这些对象,对标记语言文档进行CRUD ...

  5. jsp第三次作业

    1.在jsp页面中使用include动态标记加载音频 <%@ page language="java" import="java.util.*" page ...

  6. C#二次开发BIMFACE系列60 File Management文件管理服务及应用场景

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<C#二次开发BIMFACE系列>教程中详细介绍了如何注册BIMFACE.测试.封装服务器端接口并提供了丰富的Demo.视 ...

  7. Find the Maximum - 题解【思维,贪心】

    题面 这是2022年ICPC昆明站的F题.在赛场上,我一开始敲了个贪心,但是出锅了,改敲树形DP,但是时间来不及了.在队友的提醒下补过了这个题,知道解法的我发现我就是个纯纯的老坛-- 原题链接在牛客网 ...

  8. RAID5加热备盘

    RAID 5加热备盘 RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失.换句话说,在RAID 10 ...

  9. [题解][P5206][WC2019] 数树 (op = 1)

    简要题意 给定 \(n, y\). 一张图有 \(|V| = n\) 个点,现在给出两棵树 \(T_1=G(V, E_1)\) 和 \(T_2=G(V, E_2)\). 定义这两棵树的权值 \(F(E ...

  10. 用户与安全 -(1)Linux用户及组管理

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登 ...