CF239B Easy Tape Programming

题目描述

有一种编程语言,每个程序都是由“”和数字组成的非空序列。下面将解释这种编程语言的解释器是如何工作的。程序通过“指令指针”(IP)的移动来被解释,其中包括两个部分: - 当前字符指针(CP); - 方向指针(DP),可以指向左或右。 最开始,CP 指向序列的最左侧字符,DP 指向右。 我们不断重复以下步骤,直到 CP 第一次指向序列之外的位置为止。 - 如果 CP 指向一个数字,则解释器打印该数字,然后 CP 按照 DP 的方向移动一步。之后,序列中被打印的数字会减一。如果被打印的数字是 $0$,则无法再减少,因此该数字会从序列中被删除,序列长度减一。 - 如果 CP 指向“”,那么 DP 的方向将变为向左或向右。然后 CP 按 DP 的方向移动一步。如果 CP 遇到的下一个字符是“”,则上一个字符会从序列中被删除。 如果某一时刻 CP 跑到序列之外,则程序结束。 显然,每个这种语言的程序在若干步内一定会终止。 现在有一个长度为 $s_1, s_2, ..., s_n$ 的序列,其中每个字符都是“”或数字。你需要回答 $q$ 个询问。每个询问给定 $l$ 和 $r$,询问如果将序列 $s_l, s_{l+1}, ..., s_r$ 作为独立的程序运行,每个数字会被打印多少次。

输入格式

输入的第一行包含两个整数 $n$ 和 $q$,$1 \le n, q \le 100$,表示序列 $s$ 的长度和询问的个数。 第二行包含长度为 $n$ 的序列 $s$,每个字符是“”或数字(0..9),字符之间没有空格。 接下来 $q$ 行,每行包含两个整数 $l_i$ 和 $r_i$,$1 \le l_i \le r_i \le n$,表示第 $i$ 个询问。

输出格式

对于每个询问,输出 $10$ 个用空格分隔的整数 $x_0, x_1, ..., x_9$,其中 $x_i$ 表示在运行对应程序时,解释器打印了多少次数字 $i$。按输入顺序输出每个询问的答案。

说明/提示

由 ChatGPT 5 翻译