uoj#P641. 【美团杯2021】E. 程序解谜II

【美团杯2021】E. 程序解谜II

今天晚上有程序设计课的DDL,但是蒜斜的程设作业还一个空格都没有打过 —— 因为他一直在特训德州扑克……于是蒜斜打算向他的好朋友小美求助。

小美很愿意帮忙,所以他将自己的两个 c++ 程序 small.cpplarge.cpp 用以下方式加密后发给了蒜斜:

  1. 读入原程序中的所有字符,并过滤掉所有的空白字符,包括空格、换行以及制表符。这样就得到了一个字符串 $s$。
  2. 从 $[5,10]$ 中随机选择一个整数 $x$,并将 $s$ 的前 $x$ 个字符截取出来作为一个子段。重复这一过程,直到 $s$ 中剩余字符数量不足 $x$:这时保留剩下的所有字符作为一个子段。
  3. 把得到的所有子段随机排列。
  4. 把子段数量以及所有子段输出到密文文件中。

现在给出这两个程序的加密结果 small.encode, large.encode。你需要帮助蒜斜还原出这两个程序原本的功能,以帮助他完成作业。

为了帮助你解密,蒜斜还额外提供了作业里的样例输入输出 small.in, small.out, large.in, large.out

  1. 已知 small.cpp 在输入 small.in 的时候会输出 small.out
  2. 已知 large.cpp 在输入 large.in 的时候会输出 large.out

提交方式

你提交的程序需要把 small.cpplarge.cpp 合并到一起:输入的第一行包含一个整数 $t \in \{1,2\}$,当 $t=1$ 的时候,你的程序需要执行 small.cpp 的功能;当 $t=2$ 的时候,你的程序需要执行 large.cpp 的功能。

1
3
2021
114514
1919810
94
1888
570

样例输入二

见样例数据下载。

限制与约定

Small Task: $t = 1$。

Large Task: $t = 2$。

时间限制:$2\texttt{s}$

空间限制:$512\texttt{MB}$

下载

加密后的程序以及运行样例下载