[AGC008C]Tetromino Tiling
更好的阅读体验
给出如下图的
不难发现,第
下面考虑每种方块“自力更生”能否拼出宽度为
- 第
1 种,竖着两个并排,长宽4\times 2 ; - 第
2 种,自己符合条件,长宽2\times 2 ; - 第
3,4 种,一个倒扣在另一个上面,长宽4\times 2 。
看起来长度的一半为
还没完!我们继续考虑几种方块“通力合作”能否拼出宽度为
以此为基础,我们对上面的式子进行修正:
- 如果第
1,4,5 种方块都为奇数,在满足“自力更生”前提下,每种恰有一块剩余,可以组合,故L\gets L+3 ; - 如果第
1,4,5 种方块,只有两种为奇数,则最后会剩下两块。例如剩下了1,4 各一块,这时,我们拆出一个5 ,能得到更优的答案——拆出减4 ,重组加6 ,L\gets L+1 。
下面是 AC 代码:
void main() {
cin.tie(0), cout.tie(0);
long long a, b, c, d, e, f, g;
cin >> a >> b >> c >> d >> e >> f >> g;
long long ans = (a / 2) * 2 + b + (d / 2) * 2 + (e / 2) * 2;
if ((a & 1) + (d & 1) + (e & 1) >= 3)
ans += 3;
else if ((a & 1) + (d & 1) + (e & 1) >= 2 && (a > 0) && (d > 0) && (e > 0))//必须保证有,才能拆借
ans++;
cout << ans << endl;
}
虽然是 AGC 的 C 题,也没有那么难啊,主要是细节太多,如果放到 OI 赛制的模拟赛中,是一道很好的“签到题”。