「OI 出题」星语 (star)

星语 (star)

时间限制:1000 ms

空间限制:512 MB

题目背景

「从杭二窗边望出去,这晚霞真的好美啊!」

cdd35df1aff2439.jpg

bc68330ff352756.jpg

「晚霞送别夕阳迎来星空」

「仰望星空,寻梦开始的地方」

「你看见星星在向你眨眼了吗?」

语言描述

别看我“星语”短小精悍,我超可爱的哦!

这是一款名为“星语”的语言,名字有深意,但你只需要关心语法和执行流程:

语法

“星语”仅由两种语句构成:普通语句和终止语句。

  • pattern:replacement:普通语句。将读入串中最早出现的 pattern 替换为 replacement
  • pattern::replacement:终止语句。将读入串中最早出现的 pattern 替换为 replacement,同时终止程序。

其中 patternreplacement 均为字符串(可以为空,字符集为所有可见 ASCII 码),自动过滤其前导和末尾空格。

执行流程

当程序输入进一个字符串 \(S\) 时,“星语”会执行如下流程:

  1. 按照行依次执行语句,判断 \(S\) 中是否存在 pattern
  2. 如果存在,找到 \(S\) 中最左侧的匹配上 pattern 的子段,将其替换为 replacement。若该语句是终止语句,程序结束。否则回到步骤 1。
  3. 如果执行到程序末尾,程序结束。

你的输出即为程序结束时的 \(S\)

例题示范 1

输入串 \(S\)Hello,,用“星语”将其修改成 World!

我们可以写:

Hello,:World!

当然也可以写:

Hello,::World!

例题示范 2

输入串 \(S\),将其中所有的 s 删除。

我们可以写:

s:

例题示范 3

输入串 \(S\),在 \(S\) 的开头添一个 s

我们可以写:

::s

题目描述

本题是一道提交答案题。

现在你已经学会了 1+1,让我们来试试吧!

注意“星语”想必大家都会写,但就像「明明 polylog 的题你非得写个树分块还调不出来」一样,咱追求的是效率。“星语”也一样,你的得分将与行数有关。

当然,如果你的程序 CE 了,或者输出错误,那自然不得分捏。

任务一:石头剪刀布

转宝现在很爱玩石头剪刀布,但是又很怕玩。原因是他每次惯性思维出剪刀,大伙们看破不说破,于是每次输的都是他。

现在输入一个长度为 \(1\) 的字符串 \(S\),其为 R(石头,Rock)、S(剪刀,Scissors)、P(布,Paper)三种字符中的一种,表示转宝出的是 \(s_0\)。你的任务是赢他,即:

R -> P
S -> R
P -> S

\(S\) 替换为它。

样例

\(S\)R,程序执行结束后的 \(S\)P

评分规则

得分 10 9 8 7 6 5 4 3 2 1
行数 3 3 3 3 4 5 6 7 8 9

任务二:啵啵啵

回到班后,转转掌握了一个新技能:啵啵啵。简单来说就是把嘴唇抿起来,然后猛地向外弹,就会发出“啵”的一声。究其源头,还得是化竞那帮“杭二牛子”研究出来的花样。

现在给定一个全是 b 的串 \(S\ (2\le |S|\le 5)\),你的任务是在每个 b 后插入一个 o

样例

\(S\)bbb,程序执行结束后的 \(S\)bobobo

评分规则

得分 10 9 8 7 6 5 4 3 2 1
行数 3 3 3 4 5 6 7 8 9 10

任务三:四缺一

经典四缺一,这次是 \(1\sim 5\) 这 5 个整数中缺了一个。

给定一个长为 \(4\) 的串 \(S\),保证 \(\forall 0\le i<j<4\)\(S_i\neq S_j\)\(S_i\in [1,5]\),将其替换为缺失的那一个数。

样例

\(S\)5241,程序执行结束后的 \(S\)3

评分规则

得分 20 18 16 14 12 10 8 6 4 2
行数 7 7 8 8 9 10 11 12 13 15

任务四:11 的倍数

给定一个串 \(S\ (1\le |S|\le 5)\),保证不为 \(0\)(即 \(|S|=1\)\(S_0\)0),判断 \(S\) 在整数下是否为 \(11\) 的倍数,若是替换为 yes,否则替换为 no

样例

\(S\)231,程序执行结束后的 \(S\)yes

评分规则

得分 20 18 16 14 12 10 8 6 4 2
行数 14 14 15 16 17 18 19 20 25 30

任务五:计数

给定一个仅由 z 构成的字符串 \(S\ (1\le |S|\le 132)\),将 \(S\) 替换成 z 的个数,即 \(|S|\)

样例

\(S\)zzzzzzzzzzzzzzzz,程序执行结束后的 \(S\)16

评分规则

得分 20 18 16 14 12 10 8 6 4 2
行数 11 12 13 14 15 16 17 18 19 20

任务六:最长上升子序列(LIS)

给定一个仅由 \(1\sim 9\) 构成的字符串 \(S\ (1\le |S|\le 27)\),将 \(S\) 替换为最长上升子序列长度。

样例

\(S\)41259687899993,程序执行结束后的 \(S\)7

评分规则

限制应该给的比较松,欢迎踩标。

得分 20 18 16 14 12 10 8 6 4 2
行数 120 130 140 150 160 170 200 250 300 500

提交方式

你只需要在选手目录下的 star/ 文件夹中依次创建 star1.outstar6.out,并写入相应的“星语”代码即可。

检验方式

下发文件中有一份 sample_checker.cpp,其中函数 execute(code, S) 表示传入“星语”代码 code 以及读入 S,函数返回“星语”程序结束后的 S

注意,本 checker 不会检验您输出的正确性,只能提供“星语”的评测,且与最终实际评测的 checker 大有不同,您不需要关心最终具体的评测检验方式。

花絮

考虑到“星语”可以实现的题目实在太多了,所以把剩余的题放在这里,可供 AK 的选手娱乐。

比大小

比较串 \(X,Y\) 的字典序大小,其中 \(X,Y\) 仅由 ab 构成。

给定串 \(S\)\(X\) + ? + \(Y\),将 \(S\) 替换为 < / >

样例

\(S\)abab?abb,程序执行结束后的 \(S\)<

评分

目前能做到 19 步,不知能否更优?

posted @ 2022-07-22 16:52  wlzhouzhuan  阅读(361)  评论(1编辑  收藏  举报