台湾有一个连接着岛的东、西两岸的庞大的铁路线。这个铁路线包含有
区段可以分成三种类型。其中 C 类型的区段会有一个车站,而且只能从北面的路轨进入车站并且从南面的路轨离开。D 类型的区段也会有一个车站,而且只能从南面的路轨进入车站并且从北面的路轨离开。空 类型的区段则没有车站。举例来说,如下图所示,区段
在这个铁路系统中共有
由于从一个车站到另一个车站有多个不同的可行路线,我们定义由一个车站到另一个车站的距离为所有可行路线中所经的连接器的最少数量。例如由车站
该铁路系统是由计算机系统管理的。不幸的是,在一次电力事故后,计算机系统丢失了各车站所在的区段编号及其相应的类型。目前仅知道车站
任务
你需要编写一个函数 findLocation,以确定每一个车站所在的区段编号及其相应的类型。
- findLocation(n, first, location, stype)
- n: 车站的数目
- first: 车站
所在区段的编号。 - location: 大小为
的数组; 你需要将车站 所在的区段编号存放到 location[i] 中。 - stype: 大小为
的数组;你需要将车站 的类型存放到 stype[i] 中:其中 1 表示 C 类型,而 2 则表示 D 类型。
你可以调用一个函数 getDistance 以帮助你找出各车站的所在区段及其类型。
- getDistance(i, j) 将返回车站
到车站 的距离。如果调用 getDistance(i, i) 将返回 。如果 或 在 范围之外,getDistance(i, j) 将返回 。
子任务
在所有的子任务中,区段的数目
子任务 | 分值 | getDistance的调用次数 | 备注 | |
---|---|---|---|---|
1 | 8 | 无限制 | 除车站 | |
2 | 22 | 无限制 | 所有在车站 而所有在车站 | |
3 | 26 | 无其他限定 | ||
4 | 44 | 无其他限定 |
实现细节
本题只支持 C/C++。
你只能提交一个源文件实现如上所述的 findLocation 函数,并且遵循下面的命名和接口。你需要包含头文件 rail.h。
void findLocation(int n, int first, int location[], int stype[]);
函数getDistance的接口信息如下。
int getDistance(int i, int j);
评测方式
评测系统将读入如下格式的输入数据:
- 第
行: 子任务编号 - 第
行: - 第
行, :stype[i](1表示C类型,2表示D类型), location[i]。
在 findLocation 返回后,如果你的程序计算出的 location[0]
时间限制:
空间限制: