P8871 [传智杯 #5 初赛] C-莲子的排版设计学
题目背景
> 你现在不能休息,周围有 deadline 在游荡。
莲子正在赶自己的程序设计作业。除了完成程序代码的编写,对提交上去的作业进行排版以对助教留下良好印象同样重要。
而众所周知,文章里面的代码和一些特殊性质的文本是要附上行号的,然而它们的篇幅往往都很长,手动去加容易出现失误。因此,莲子决定自力更生造轮子,写一个行号生成器。
题目描述
莲子希望实现这样一个功能:输入一份文本文件,并给该文件加上行号。
以下是本题中三个基本概念的定义:
- **文本字符**由 $\textsf{ASCII}$ 中所有的可视字符,以及空格($\textsf{ASCII}=32$)组成。
- **一行字符**由若干个(可以为 $0$ 个)文本字符,以及在末尾**恰好一个**换行符($\textsf{ASCII}=10$)组成。
- **文本文件**由若干个(至少为 $1$ 个)一行字符组成。文本文件的行数就是组成它的行的数量。
以下是本题中添加行号的方法:
- 设该文本文件一共有 $m$ 行。设正整数 $m$ 的字宽为 $s$。那么,在每一行的开头会有 $s+1$ 的长度用来显示行号。
- 对于第 $i$ 行,假设 $i$ 的字宽为 $t$,那么这一行行号将会显示为 $\underbrace{\texttt{␣␣...␣}}_{s-t\text{ 个}}\ i\ \texttt{␣}$,其中 $\texttt{␣}$ 表示空格。
以下是一个例子:
$$\boxed{\begin{aligned}
&\verb!#include!\\
&\verb!using namespace std;!\\
&\verb!int main(){!\\
&\verb! int a, b;!\\
&\verb! cin >> a >> b;!\\
&\verb! cout
输入格式
无
输出格式
无
说明/提示
### 数据范围及约定
对于全部数据,保证输入的文本文件的字符总数(包括换行符在内),不超过 $2\times 10^4$。同时,保证输入数据合法。
评测时,会忽略选手输出文件的行末空格与文末换行。因此选手可以自行决定行尾是否要输出多余空格。请使用 Java 或 Python 语言作答的选手注意输入输出时的效率。