#arc0074. [arc007_4]破れた宿題
[arc007_4]破れた宿題
问题
高桥君正在解一道数学作业题,要求他回答等差数列的首项和公差。等差数列是指相邻两个数字之间的差是一个固定的常数,首数字称为首项,相邻数字之间的差称为公差,最后一个数字称为末项。不过,高桥君不小心将作业中的数列抄写在笔记本上时,没有用空格或逗号分隔数字,而是以由0到9的数字构成的一个字符串的形式写下来了。而且,由于笔记本的保存方式有些粗糙,他把其中一部分撕裂并剪掉了。撕裂和剪掉的部分包括了首项和末项,但至少确认了首项的一部分还留在了笔记本上。现在给定这样一个字符串,请推测原始的数列并回答首项和公差。
需要注意的是,首项和公差都是大于等于1的整数,如果存在多个解,则回答首项最小的解,如果存在多个首项相等的解,则回答公差最小的解。 此外,无需考虑数字前面可能出现的无关零(如003,012),它们并不包含在抄写的数列中。
输入
输入以以下格式从标准输入中给出:‥‥
- 输入只有一行,是一个长度为的字符串,该字符串是等差数列的一部分。
- 字符串由0到9的数字组成。
部分分
测试数据有以下4种类型的数据集,每个数据集对应不同范围的字符长度N,每个数据集都会提供字符串N的测试数据。如果对某个数据集中的所有测试数据输出正确答案,则即使在其他数据集中输出错误答案,也会给予部分得分。
- level1(25分):
- level2(25分):
- level3(25分):
- level4(25分):
输出
对于可能被切分的等差数列,以空格分隔的形式在标准输出中输出可能的首项和公差,仅占一行。
如果存在多个解,则回答首项最小的解,如果存在多个首项相等的解,则回答公差最小的解。
最后请输出换行符。
示例 1
1
输出 1
1 1
- 虽然首项前后可能有连续的数字,但最小的首项是没有被切割的数字1。
- 公差可以是任意正整数,但最小的公差是1。
示例 2
0203
输出 2
10 10
- 由于不能作为一个数被认可,所以首项不是2。
- 首项10中的1被切割掉了,末项30中的0被切割掉了,原始数列是
102030
。
示例 3
456789101112131415
输出 3
4 1
- 这是一个没有缺失的等差数列,首项是4,公差是1。
示例 4
579111315171921232
输出 4
5 2
- 末项25的5部分被切割掉了,这是一个等差数列。
示例 5
001131261391521651
输出 5
100 13
- 首项100和末项178的一部分被切割掉了。
来源
ARC 007