• 「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 步,不知能否更优?

  • 相关阅读:
    Leetcode Minimum Path Sum
    Leetcode House Robber II
    洛谷 P5375 【[THUPC2019]组合数据结构问题】题解
    洛谷 P1855 【榨取kkksc03】题解
    CF1173A 【Nauuo and Votes】题解
    [NOIP2018D1T1][NOIP2013D1T1][Luogu P5019]铺设道路 题解
    [BZOJ1083][SCOI2005]繁忙的都市 题解
    统计自己洛谷AC题目爬虫
    CF43A Football 题解
    SP2 PRIME1
  • 原文地址:https://www.cnblogs.com/wlzhouzhuan/p/16506326.html
Copyright © 2020-2023  润新知