C. 莲子的排版设计学
你现在不能休息,周围有 deadline 在游荡。
莲子正在赶自己的程序设计作业。除了完成程序代码的编写,
对提交上去的作业进行排版以对助教留下良好印象同样重要。
而众所周知,文章里面的代码和一些特殊性质的文本是要附上
行号的,然而它们的篇幅往往都很长,手动去加容易出现失误。因
此,莲子决定自力更生造轮子,写一个行号生成器。
莲子希望实现这样一个功能:输入一份文本文件,并给该文件
加上行号。
以下是本题中三个基本概念的定义:
文本字符由 ASCII 中所有的可视字符,以及空格(ASCII = 32)
组成。
一行字符由若干个(可以为 0 个)文本字符,以及在末尾恰
好一个换行符(ASCII = 10)组成。
文本文件由若干个(至少为 1 个)一行字符组成。文本文件
的行数就是组成它的行的数量。
以下是本题中添加行号的方法:
设该文本文件一共有 𝑚 行。设正整数 𝑚 的字宽为 𝑠。那么,
在每一行的开头会有 𝑠 + 1 的长度用来显示行号。
对于第 𝑖 行,假设 𝑖 的字宽为 𝑡,那么这一行行号将会显示
为 ␣␣⏟ . . . ␣ 𝑖␣
𝑠−𝑡个
,其中 ␣ 表示空格。
以下是一个例子:
为了便于读者观察,这里将所有的空格换成用来表示空格的
␣ 字符。
输入格式
输入包含若干行,为原始的文本文件。
输出格式
输出包含若干行,为加上行号后的文本文件。
由于文档排版限制,洛谷上的样例排版结果更佳。
输入样例
1
#include
using namespace std;
int main(){
int a, b;
cin >> a >> b;
cout << a + b << endl;
cout << a
- b << endl;
cout << a * b << endl;
cout << a / b << endl;
return 0; }输出样例 1 1 #include
2 using namespace std;
3 int main(){
4 int a, b;
5 cin >> a >> b;
6 cout << a + b << endl;
7 cout << a - b << endl;
8 cout << a * b << endl;
9 cout << a / b << endl;
10 return 0;
11 }
输入样例
2
public class Main {
public static void main(String[] args) throws
Exception {
int b = 0, c = 0;
for (int a = 123; a < 333; a++) {
int[] array = new int[10];
Boolean flag = true;
b = a * 2;
c = a * 3;
array[a / 100] = 1;
array[a / 10 % 10] = 1;
array[a % 10] = 1;
array[b / 100] = 1;
array[b / 10 % 10] = 1;
array[b % 10] = 1;
array[c / 100] = 1;
array[c / 10 % 10] = 1
;
array[c % 10] = 1;
for (int i = 1; i < array.length; i++) {
if (array[i] != 1) {
flag = false;
break;
}
}
if (flag)
System.out.println(a+" “+b+” "+c);
}
}
}
输出样例 2
1 public class Main {
2 public static void main(String[] args) throws
Exception {
3 int b = 0, c = 0;
4 for (int a = 123; a < 333; a++) {
5 int[] array = new int[10];
6 Boolean flag = true;
7 b = a * 2;
8 c = a * 3;
9 array[a / 100] = 1;
10 array[a / 10 % 10] = 1;
11 array[a % 10] = 1;
12 array[b / 100] = 1;
13 array[b / 10 % 10] = 1;
14 array[b % 10] = 1;
15 array[c / 100] = 1;
16 array[c / 10 % 10] = 1;
17 array[c % 10] = 1;
18 for (int i = 1; i < array.length; i++)
{
19 if (array[i] != 1) {
20 flag = false;
21 break;
22 }
23 }
24 if (flag)
25 System.out.println(a+" “+b+” "+c);
26 }
27 }
28 }
输入样例 3
样例文件较大,请于洛谷查看。
输出样例 3
样例文件较大,请于洛谷查看。
数据规模
对于全部数据,保证输入的文本文件的字符总数(包括换行符
在内),不超过 2 × 10^4。同时,保证输入数据合法。
评测时,会忽略选手输出文件的行末空格与文末换行。因此选
手可以自行决定行尾是否要输出多余空格。
请使用 Java 或 Python 语言作答的选手注意输入输出时的
效率。