P11738 [集训队互测 2015] 未来程序·改

题目背景

洛谷可提交代码长度最长为 50KB。如果您的代码超过 50KB,请尝试压行、替换变量名等操作。

题目描述

在 2111 年,第 128 届全国青少年信息学奥林匹克冬令营前夕,Z 君找到了 2015 年,第 32 届冬令营的题目来练习。 他打开了第三题 “未来程序” 这道题目: “本题是一道提交答案题,一共 10 个测试点。 对于每个测试点,你会得到一段程序的源代码和这段程序的输入。你要运行这个程序,并保存这个程序的输出。 遗憾的是这些程序都效率极其低下,无法在比赛的 5 个小时内得到输出。” Z 君想了一下,决定用 2111 年的计算机来试着运行这个题目,但是问题来了,Z君已经找不到 96 年前的那次比赛的测试数据了…… 没有给出输入数据的提交答案题就不成其“提交答案题”之名,为了解决这个问题,Z君决定将这个题目改造成传统题。 Z 君知道 96 年前的计算机的性能比现在差多了,所以这道题的测试数据中,输入数据的规模被设计成很小,从而,做这道题的选手只需要暴力模拟源代码的工作流程就可以通过它。 现在这道题摆到了你的面前。 本题是一道传统题,一共有 10 个测试点。 对于每个测试点,你的程序会得到一段程序的源代码和这段程序的输入。你的程序需要运行这段程序,并输出这段程序的输出。 ### **关于给出的源代码的约定** Z 君是一名 C++ 选手。为了简化这个问题,Z君在给出的源代码中去掉了 C++ 语言的大量特性。从而这个源代码具有以下特点: - 第一行必定为 `#include` (不含引号) - 这个库中只会调用到对象 `cin`,`cout`,`endl`,`cin` 的 `>>(int)` 函数和 `cout` 的 `

输入格式

输入文件分为两个部分。 第一行,有一个整数 $N$。它描述了源代码对应的输入文件 `program.in` 中包含的整数数目。 以下 $N$ 个整数构成了源代码对应的输入文件 `program.in`。 这之后的部分构成了源代码 `program.cpp`。

输出格式

输出文件是将 `program.cpp` 编译后输入 `program.in` 后所得到的输出。

说明/提示

### 限制与约定 输入的所有 `program.cpp` 都是手打的,每个输入文件的大小不超过 $7\texttt{KB}$。 - 测试点 #1 的 `program.cpp` 见样例数据及附加文件下载。 - 测试点 #2 到 #4 的 `program.cpp` 符合以下格式: ```cpp #include #include using namespace std; int main() { cout using namespace std ; FUNC_AND_VAR FUNC_AND_VAR ::= | ε | int NAME ( OPTPARAMS ) { STATEMENTS } FUNC_AND_VAR | int DEFINEVAR DEFINEVARS ; FUNC_AND_VAR OPTPARAMS ::= | ε | int NAME PARAMS PARAMS ::= | ε | , int NAME PARAMS STATEMENTS ::= | ε | STATEMENT STATEMENTS STATEMENT ::= | EXPRESSION ; | { STATEMENTS } | int DEFINEVAR DEFINEVARS ; | if ( EXPRESSION ) STATEMENT | if ( EXPRESSION ) STATEMENT else STATEMENT | for ( STATEMENT_IN_FOR ; OPTEXPRESSION ; STATEMENT_IN_FOR ) STATEMENT | while ( EXPRESSION ) STATEMENT | return EXPRESSION ; STATEMENT_IN_FOR ::= | OPTEXPRESSION | int DEFINEVAR DEFINEVARS OPTEXPRESSION ::= | ε | EXPRESSION EXPRESSION ::= | UNIT9 | EXPRESSION > UNIT9 UNIT0 ::= | INT_CONSTANT | UNIT0 [ EXPRESSION ] | ( EXPRESSION ) | NAME ( OPTARGUS ) // 注:此处的 NAME 是一个函数名 | NAME // 注:此处的 NAME 是一个变量名 | cin | cout | endl UNIT1 ::= | UNIT0 | + UNIT1 | - UNIT1 | ! UNIT1 UNIT2 ::= | UNIT1 | UNIT2 * UNIT1 | UNIT2 / UNIT1 | UNIT2 % UNIT1 UNIT3 ::= | UNIT2 | UNIT3 + UNIT2 | UNIT3 - UNIT2 UNIT4 ::= | UNIT3 | UNIT4 < UNIT3 | UNIT4 UNIT3 | UNIT4 >= UNIT3 UNIT5 ::= | UNIT4 | UNIT5 == UNIT4 | UNIT5 != UNIT4 UNIT6 ::= | UNIT5 | UNIT6 ^ UNIT5 UNIT7 ::= | UNIT6 | UNIT7 && UNIT6 UNIT8 ::= | UNIT7 | UNIT8 || UNIT7 UNIT9 ::= | UNIT8 | UNIT8 = UNIT9 OPTARGUS ::= | ε | EXPRESSION ARGUS ARGUS ::= | ε | , EXPRESSION ARGUS DEFINEVARS ::= | ε | , DEFINEVAR DEFINEVARS DEFINEVAR ::= | NAME | DEFINEVAR [ INT_CONSTANT ] NAME ::= 仅包含大小写字母、数字、下划线的非空字符串,且不以数字开头。 INT_CONSTANT ::= 仅包含数字的非空字符串,且不以0开头,或这个字符串就是0。 ```