QOJ.ac

QOJ

Total points: 100 Output Only

#10229. Creating a new language

الإحصائيات

Problem Statement

Adam刚刚实现了一种字符串子串搜索算法,他声称该算法比传统的 KMP(Knuth–Morris–Pratt)算法工作得更快。为了庆祝这一点,Adam决定创造一种新的语言PION(他声称这是 完全基于指令的语言 的缩写),它只基于字符串子串搜索。

PION语言只包括两种指令。 pattern:replacementpattern::replacement。这里,patternreplacement 可能是空字符串,其字符的ascii码在32和126之间。它们不能以空格(ascii代码32)开始或结束,任何这样的空格将被忽略。例如," a b : " 是一个有效的指令,pattern 是 "a b",replacement 是 ""(空字符串)。

PION中的一个程序由许多指令组成。当程序被执行时,输入字符串将被保存在一个缓冲区中。对于每一轮,解释器将扫描所有的指令。对于每个指令,pattern 字符串将在缓冲区中被搜索,看它是否作为子串出现。第一个这样的(pattern 作为子串出现)指令将被执行。要执行一个指令,第一次出现的 pattern 字符串将被替换为 replacement 字符串。如果 pattern 字符串是空的,replacement 字符串将被插入到缓冲区的开头。在执行完一个 :: 类型的操作后,程序将停止。在执行了一个 : 类型的操作后,另一轮将开始。如果在某一轮中没有执行任何操作,程序也将停止。程序的输出将是缓冲区中的最终字符串。

为了保持执行速度,亚当设置了以下限制。

  • 程序的长度(总字符数)不能超过1000
  • 最多可以执行50000轮
  • 每一轮结束后,缓冲区内的字符串长度不能超过500。

为了证明这种语言的能力,亚当设计了10个计算任务。你的任务是用令人印象深刻的PION语言来解决这些任务!

Sample Task

考虑如下任务:如果输入字符串包含任何 "a",则按原样输出,否则删除输入字符串中的所有 "x" 并输出。

下面是一个解决这个任务的PION程序。当然,最后一行是没有必要的。

a::a
x:
excited::excited

Grading

对于每一项任务,如果你的程序不能在上述限度内正确完成计算任务,你将得不到任何分数。否则,你的分数取决于所提供的 .in 文件。.in 文件的第二行包含十个整数。如果你的程序的行数不超过其中的 $x$ 个,你将得到 $x$ 分。

在选手文件夹下,提供了 checker.cpp 。编译后,运行 checker 获得你的分数,checker x 获得你在 $x$ 号输入上的执行细节。除了随机数发生器和输入/输出格式外,评判系统中的检查器与提供的检查器完全相同。

Task Description

以下每项任务的分值为10分(详见评分部分)。它们的评分参数提供为 lang1.in-lang10.in。为了方便,在评分参数之后,我们在对应的 .in 文件中也提供了这些任务的描述。

  • 任务1: 输入一个长度为1-20的只包含o的字符串。如果其长度为奇数,则输出 odd,否则输出 even。例如,ooo->odd,oooo->even。
  • 任务2:输入一个长度为3到10的只包含o的字符串,用x替换右数第三个o,例如,oooo->oxoo。
  • 任务3:输入一个长度为1到9的只含o的字符串,并输出一个长度为10-原长度的字符串。例如,oooo->oooooo。
  • 任务4:输入一个长度为1到20的只包含012的字符串,并输出它的数字之和对3取模的结果。例如,012->0,221->2,112->1。
  • 任务5:输入一个长度为1到20的只含01的数字串,并将各位取反。例如,01->10,100->011。
  • 任务6:输入一个长度为1到20的只包含01的数字串,并将其颠倒输出。例如,00101->10100。
  • 任务7:输入一个长度为1到200的只包含01的数字串,将其排序并输出。例如,00101->00011。
    • 特别限制:运行轮数不能超过500(而不是50000)。
  • 任务8:输入一个只包含o的长度为2到30的偶数的串,在正中间插入字符|。例如,oooo->oo|oo。
  • 任务9:输入一个长度为6的只包含l(小写的L)和1(一)的字符串,在相邻的两个字符之间插入1,2,3,4,5个o。例如,1ll1l1->1oloolooo1oooolooooo1。
  • 任务10:输入一个长度为$n^2$的字符串($1\le n\le 14$),输出一个只包含o的长度为n的字符串,例如ooooooooo->ooo。

أو قم برفع الملفات واحداً تلو الآخر:

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.