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. 深入剖析 RocketMQ 源码 - 负载均衡机制

    RocketMQ作为一款流行的消息中间件在各大互联网应用广泛,本文主要分析RocketMq在消息生产和消费过程中的负载均衡机制,并创新提出消费端负载均衡策略的改写以实现固定IP消费的可能.

  2. MySQL8.0.x 版本安装步骤傻瓜式教程【官方版】

    MySQL8.0.x 安装 一.下载 MySQL官网下载链接:https://downloads.mysql.com/archives/community/ 选择版本后下载zip文件 博主选择的是8. ...

  3. 2021.08.09 P7238 迷失森林(树的直径)

    2021.08.09 P7238 迷失森林(树的直径) P7238 「DCOI」迷失森林 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的直径两种求法:两次dfs.树 ...

  4. python基础练习题(题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少)

    day13 --------------------------------------------------------------- 实例021:猴子偷桃 题目 猴子吃桃问题:猴子第一天摘下若干 ...

  5. css兼容问题集锦

    BEGIN; 1.文本框很大,导致里面的内容不居中.以及内容为数字时,不支持text-indent属性 解:line-height: K px; (值为文本框的height值). 2.文本框有背景图片 ...

  6. 我向PostgreSQL社区贡献的功能:空闲会话超时

    经过约八个月的努力,终于完成了 PostgreSQL 空闲会话超时断开的功能. 该功能将在版本 14 中发布. 这是我第一次向 PostgreSQL 提供功能,虽然之前也有向社区提供过补丁,但是这次整 ...

  7. python学习-Day33

    目录 今日内容详细 socket socket套接字简介 socket模块 服务端 客户端 通信循环 服务端 客户端 链接循环 半连接池 概念 产生半连接的两种情况 黏包问题 多次发送被并为一次 TC ...

  8. postman4.15

    测开培训笔记4.15 postman:很主流的API测试工具,也是在工作中使用很广泛的研发工具 queue 队列 先进先出的原则 列如:客户端有100个请求 服务端最多只能承受90个 其余都要排队进行 ...

  9. 公司官网建站笔记(一):腾讯云服务器装CentOS8.2系统、重置密码、远程ssh登陆、sftp传递文件以及新建开发者账户

    前言   本篇使用的是腾讯云服务器,讲解了部署安装服务器CentOS8.2系统,重置密码,添加用户,远程登陆,远程传递文件等基本流程.   前提条件   购买了腾讯云服务器,如下图:     云服务器 ...

  10. vue3中的四种插槽的介绍-保证让你看看的明明白白!

    插槽 当组件中只有一个插槽的时候,我们可以不设置 slot 的 name 属性. v-slot 后可以不带参数,但是 v-slot 在没有设置 name 属性的时候, 插槽口会默认为"def ...