题目一
F. Not Splitting
原题链接:Problem - 1627F - Codeforces
题目翻译:
这里是一个K*K的网格,K是偶数。 (r,c)表示矩形有r行,c列。 如果两个矩形 (r1,c1)(r1,c1)和 (r2,c2)(r2,c2) 满足|r1−r2|+|c1−c2|=1,就说这两个矩形是相邻的。
一个由相邻的两个正方形组成的数组叫做稳固状,如果有可能把一个网格切成两个有连接的,全等的几块,来确保每一块都是完全相等的。两块是相等的如果一个可以被另一个通过平移,旋转,镜射或与其他结合的方式匹配。
上面的图片代表第一个例子。箭头表示一对正方形,并且加粗的黑线代表切线。你会被提供一组数组a,里面有n对相邻的正方形。找到数量最大的稳固状a数组的子序列。数组p是数组q的子序列如果p可以被从q中获得,通过删除一些元素(可能是零或所有)
输入
输入包括多个测试样例。第一行包含一个数字——测试样例的个数(1——100)。接下来是样例的描述。每一个样例的第一行包含两个空间分隔的数字n和k——数组的长度,网格的大小,接下来的都是如此。
接下来有n 行。第i行包含四个分割的数字ri,1ri,1, ci,1ci,1, ri,2ri,2, and ci,2ci,2 (1≤ri,1,ci,1,ri,2,ci,2≤k1≤ri,1,ci,1,ri,2,ci,2≤k) —数组a的第i个元素通过第一个正方形的行列(ri,1,ci,1)(ri,1,ci,1)和第二个正方形的行列 (ri,2,ci,2)(ri,2,ci,2).表示,这些正方形是相邻的。
已经确保所有样例n的和不超过10的五次方,并且所有样例的k的和不超过500。
输出
对于每一个样例输出一个单独的数字——数组a最大的稳固型子序列。
例子
3
8 4
1 2 1 3
2 2 2 3
3 2 3 3
4 2 4 3
1 4 2 4
2 1 3 1
2 2 3 2
4 1 4 2
7 2
1 1 1 2
2 1 2 2
1 1 1 2
1 1 2 1
1 2 2 2
1 1 2 1
1 2 2 2
1 6
3 3 3 4
Output
7
4
1
注意
在第一个例子中数组a是不好的,但是如果我们拿走子序列[a1,a2,a3,a4,a5,a6,a8],然后正方形就可以被分成声明中说的那样了。
在第二个例子中,我们可以拿走包含最后四个元素的a的子序列,然后我们可以用一条水平的穿过中心的线分割正方形。