P3695 赛亚龙!演讲开始之前
上一次小模拟之后,我觉得自己不能再颓废了,所以我来了一个大模拟。
然后这个问题花了我一个多星期
仍然是最糟糕的解决方案
@ >
但是,为了纪念我的第20个紫色问题和我这周的努力,我还是想写一个解决方案来记录我的每一点。
总体思路
模拟题根据题意直接模拟(雾。
此题适合分步完成。
关于变量
使用的变量大多是汉语拼音或缩略语或半缩略语(更容易调音)。
有些地方不用加注释,直接看拼音就可以明白意思。
成长过程1.输出、变量、赋值
一开始我也是这么想的:
首先完成输入变量、数组、赋值和输出。
输出
表达式的值可以直接计算输出。
变量和数组
使用了两个map,用于映射string与int或array的关系。
作业
类似输出,保存变量名,计算下面表达式的值。
查看代码了解详情。
很明显这个js是错的,没有判断和减法,:yosoro 2-1是错的。
数组的处理也有些错误。
20 分。
但我当时并不在意,所以我打电话给ihu。
两个.ihu
ihu的思路很简单,不考虑循环。
如果ihu有效,则依次执行;否则,将读取并跳过更深的数据。
layer number的定义大概就是每次遇到一个{layer +1,遇到} layer -1。
然后我稍微改了一下js,改善减法的维护。
代码
事实证明,我的ihu思维并没有大错。
30 分。
三个。数组
在我查看数据图表之后。
就是这样:
“不,应该是50?”
然后开始调试数组。
发现如果js使用递归,ls是全局变量,会被清空。
那我直接把它算成一个数……
没有考虑数组下标为变量的情况。
不过,50分刚交出来……
代码
第四个.hor
从此开始有点恶心了。
由于重复操作,顺序操作可能不太容易,所以这里选择递归。
使用 zhixing 函数来存储对更深数的操作。使用loop循环递归处理。
但由于某种奇怪的原因,main函数中的知行是以读的形式执行的,而递归是以存储的形式执行的。
所以必须有一些判断来统一读取或存储的代码。
代码
但这只能执行单级循环,不能嵌套(不管是嵌套循环还是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
添加对偶输出:
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未能hold住的skip和while语句。
五个.while
ihu和hor完成后,while很好。
因为 while 是 ihu 和 hor 的组合。
对了,我又修改了js函数。
修复了数组下标为前面提到的变量时的错误。
ihu 在循环中的跳过处理也得到了改进。
代码
可以发现此时知行函数有返回值。
这是判断是否需要跳过ihu。
而此时duiy函数的统计方式也变成了大括号的直接统计,而不是hor统计。
上交后,80分,两个TLE。
六套
通过下载数据可以发现变量和#6的集合的值之间没有空格,导致我的处理出现奇怪的错误(我的处理是用空格分割的)。
既然如此,那么集合中的 , 无论如何都是绝对存在的,所以根据这个 , 来划分变量。
AC 代码
七。数组
“你如何实现你的向量?”
“直接用就行了。”
“如果是 9 怎么办?”
“嗯?哦,我先推回 1000 个零。”
“你呢?”
“好像是这样。”
虽然这段对话有点奇怪,但我们都明白对方的意思。
所以我用 int 数组替换了向量。
事实上,几乎是一样的(反正是最坏的解决方案)。
AC 代码
带有调试过程的代码
总结
个人觉得这个紫色的大模拟还是对编码能力的锻炼很有用。
除了过程有点煎熬,A掉了之后还是很开心的。
如果您对我的代码有任何疑问,可以私下问我。
在 2022 年 noip 之后退休。您仍然可以在退休前回复。
大学毕业后,我可能会去锣鼓或博客公园看看。
如果你觉得这个问题写得好,请不要吝啬你的点赞。
广告
博客园
暂无评论内容