#P16046. [Oni2024国家队选拔赛]Graba
[Oni2024国家队选拔赛]Graba
题目描述
Mutu 正在学习 C++。老师要求他写一个有 个整型参数的函数:
$$f : \{0,1,\ldots,10^6\}^{N} \to \{0,1,\ldots,10^6\}.$$同时,老师给出了 条约束,这些约束用一个大小为 的矩阵 表示。矩阵行编号为 ,列编号为 。第 条约束要求:
但是 Mutu 会写的程序结构很有限。你需要帮他写出的函数只能是下面这种形式:
int f(int x1, ..., int xN) {
if (x_i1 == j1) return k1;
if (x_i2 == j2) return k2;
...
if (x_iL == jL) return kL;
return -1;
}
你可以自行选择判断语句的数量 ,以及每条语句中的三元组:
函数会按顺序执行这些 if。也就是说,对于某个输入向量,函数会返回第一条满足条件的语句对应的 ;如果没有任何语句满足,则返回 -1。
任务
给定 和矩阵 ,请构造一组 if 语句,使得上述函数满足所有 条约束。
如果不存在这样的函数,输出 -1。
输入格式
第一行包含两个整数 。
接下来 行,每行包含 个整数,第 行第 个数表示 。
输出格式
如果无解,输出一行:
-1
否则输出 行,每行三个整数:
i_x j_x k_x
第 行表示一条语句:
if (x_i_x == j_x) return k_x;
输出的语句顺序就是函数中判断语句的执行顺序。
数据范围
- ;
- ,其中 ,;
- 对于输出的每条三元组,应满足 ,;
- 。
题目保证:如果存在解,则存在一个三元组数量不超过 的解。
子任务
| 子任务 | 分值 | 限制 |
|---|---|---|
| 1 | 11 | |
| 2 | 23 | |
| 3 | 18 | |
| 4 | 48 | 无额外限制 |
注:第 4 个子任务包含两个测试组,分值分别为 29 和 19。
样例 1
输入
4 3
3 2 3 4 4
8 2 2 5 4
3 3 3 6 2
输出
4 9 0
2 2 4
1 3 2
样例 1 解释
输出对应的函数为:
int f(int x1, int x2, int x3, int x4) {
if (x4 == 9) return 0;
if (x2 == 2) return 4;
if (x1 == 3) return 2;
return -1;
}
它满足:
样例 2
输入
2 4
0 0 0
0 1 1
1 0 1
1 1 0
输出
-1