题解:P17669 [IO 2025 #4] 卢拉的火柴魔术
题目大意
给定一个由
这里的矩形要求两条水平边和两条竖直边都完整,没有缺口。
思路
题目最底下的图给了我们一点启发,记住左图这个数字
就变成了一个数字
这样好看多了后,我们这样想,我们每次都向右填满后一直扩展,看看会有怎么样一个规律。
从
从
再多做几种情况,就发现了规律,往后无非就是填满后删一条或者两条边,到达
看不懂?高亮一波:
就是这个数字
于是得出递推关系,设
- 若
n 为奇数,则f(n)=f(n-1)+2 。 - 若
n 为偶数,则f(n)=f(n-1)+1 。
本质等价于
简单证明
每次向右扩展时,按照图中的方式交替增加
下面说明不能取得更少。分别考虑上面一行、下面一行,以及忽略中间横边后的整个长条。这三个长条各有
而每根火柴恰好属于其中两个长条,所以取走
我们的构造恰好达到这个下界,因此是最优的了。
代码
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int a[10010];
signed main(){
int n;
cin>>n;
a[1]=2;
a[2]=3;
for(int i=3;i<=n;i++){
if(i%2==1) a[i]=a[i-1]+2;
else a[i]=a[i-1]+1;
}
cout<<a[n]<<endl;
}
致谢
本文配图由本人提供草图,ChatGPT 辅助绘制与调整。