「GLR-R3」 春分
同班化竞生 7min 切掉了,所以应该很简单。
一些吐槽:
为什么不用两个容器,为什么分隔板贴这么紧。
- Subtask 1
大户人家做法,每对溶液组配一个专用的!需要
- Subtask 2
第一个做法完全没有运用题目条件,即既没有拼板,也没有翻版,很不优。
现在我们节俭一点,每个溶液配一个板,一对溶液实验时两个板拼起来用。
要使用
- Subtask 3
第二个做法有明显缺陷,就是实验结束后,每个板都有一面是没有接触过溶液的,还是很浪费。
发现一个板如果只脏了一面,还可以换一面给其它溶液配上。
于是把
然后把第一组的板翻个面作为第二组的专属板,然后去和
需要
对于子任务3 发现多了一个板。
考虑再节约一点。当
需要
免责声明: 数据点是 Rainybunny 安排的,如果有同学对这组子任务卡了向上向下取整的行为心怀不满,可以和她深入交流一下,与我无关。
- Subtask 4
分析一下做法 3 的劣势。最劣的地方是,我们用板的脏面去触碰了板的干净面,这种行为我们认为是极其不优秀的,我们带着这种想法去构造更优方案。
我们把
把
然后把
注意到现在
最后,把
说完了。要用
这个子任务没有卡边界情况啥的。
- Subtask 5
发现上个做法有一个很糟心的点,就是我们在进行三层板操作时,我们用了一大片右面干净板来保证
因此继续,我们把
先把
得到如下局面(
把
然后把
使用了
- Subtask 7
我们在上面全部的做法中,我们全部给
考虑这样一种构造,我们把
然后添加一个神奇的板,把
之后把
最后把
于是,我们使用了
/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
int main() {
int n; scanf("%d", &n);
int s0 = n + 1 >> 1, t0 = (n + 2) / 3, t1 = (n - t0 + 1) >> 1;
int p = s0 + t0 + t1 + 1;
printf("%d\n", p);
rep (i, 1, s0) { // S0->T0, S0->T1.
rep (j, 1, t0 + t1) {
printf("2 %d %d %d %d\n", i, i, j + s0, j);
}
}
rep (i, 1, s0) { // S0->T2.
rep (j, t0 + t1 + 1, n) {
printf("3 %d %d %d %d %d\n", i, i, p, -(j - t1 + s0), j);
}
}
rep (i, s0 + 1, n) { // S1->T0.
rep (j, 1, t0) {
printf("3 %d %d %d %d %d\n", i, -(i - s0), -p, j + s0, j);
}
}
rep (i, s0 + 1, n) { // S1->T1.
rep (j, t0 + 1, t0 + t1) {
printf("2 %d %d %d %d\n", i, -(i - s0), -(j - t0 + s0), j);
}
}
rep (i, s0 + 1, n) { // S1->T2.
rep (j, t0 + t1 + 1, n) {
printf("2 %d %d %d %d\n", i, -(i - s0), -(j - t1 + s0), j);
}
}
return 0;
}