由于某些原因本题仅支持 C++, C++11 语言的提交。
滨海湾花园是新加坡的一个大型自然公园。公园内有
一条从塔
序列的第一个元素是
,序列的最后一个元素是
,序列中所有元素互不相同,
序列中每两个相邻元素(塔)都是被某一座桥连接起来的。
注意根据定义,一个塔到它自己有且仅有一条路径,并且从塔
负责该项设计的首席设计师希望待建造的桥梁要符合:任意给定
请构造一个桥的集合来满足设计师的要求,或判定这样的桥梁集合不可能存在。
实现细节
你必须引用 supertrees.h
头文件。
你需要实现下面的这个函数:
int construct(std::vector<std::vector<int>> p)
:一个表示设计师要求的 数组。如果这个建设方案是存在的,该函数应该恰好调用一次
build
(见下文)来给出建设方案,然后应返回 。
否则,该函数应该返回 build
。
该函数将被调用恰好一次。
函数 build
定义如下:
void build(std::vector<std::vector<int>> b)
:一个 的数组, 表示有一座桥连接塔 和塔 ,否则 。
注意该数组必须满足:对所有
输入格式
评测程序示例以如下格式读取输入数据:
- 第
行: - 第
行( ):
输出格式
评测程序示例的输出格式如下:
- 第
行:construct
的返回值。
如果 construct
的返回值为
- 第
行( ):
样例一
input
4 1 1 2 2 1 1 2 2 2 2 1 2 2 2 2 1
output
1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0
explanation
考虑以下调用:
construct([[1, 1, 2, 2], [1, 1, 2, 2], [2, 2, 1, 2], [2, 2, 2, 1]])
这表明从塔
为了给出这个解决方案,函数 construct
应该做以下调用:
build([[0, 1, 0, 0], [1, 0, 1, 1], [0, 1, 0, 1], [0, 1, 1, 0]])
函数应该返回
对于这个例子,存在多种不同的建设方案来满足要求,所有这些方案都被认为是正确的。
样例二
input
2 1 0 0 1
output
1 0 0 0 0
explanation
考虑以下调用:
construct([[1, 0], [0, 1]])
这表明无法在两个塔之间进行旅行。这只能通过不建设桥梁来满足。
因此,函数 construct
应该做以下调用:
build([[0, 0], [0, 0]])
然后,函数 construct
应该返回
样例三
input
2 1 3 3 1
output
0
explanation
考虑以下调用:
construct([[1, 3], [3, 1]])
这表明从塔 construct
应该返回 build
。
限制与约定
对于
(对所有 ) (对所有 ) (对所有 )
子任务 | 附加限制 | 分值 |
---|---|---|
没有额外约束条件 |
时间限制:
空间限制: