洛谷P1149《火柴棒等式》
七月 15, 2018
2129
「枚举」的入门题目
题目描述
给你n根火柴棍,你可以拼出多少个形如的等式?等式中的 是用火柴棍拼出的整数(若该数非零,则最高位不能是 )。用火柴棍拼数字 的拼法如图所示:
注意:
- 加号与等号各自需要两根火柴棍
- 如果 ,则 与 视为不同的等式( )
- 根火柴棍必须全部用上
输入输出格式
输入格式:
一个整数 () 。
输出格式:
一个整数,能拼成的不同等式的数目。
输入样例#1:
1 |
|
输出样例#1:
1 |
|
输入样例#2:
1 |
|
输出样例#2:
1 |
|
说明
【输入输出样例1解释】
个等式为 和 。
【输入输出样例2解释】
个等式为:
1 |
|
解题思路
枚举思路
我们可以枚举和
上界?
手算啊
,去掉符号用的4根火柴棒,相当于是「」
再(这里只考虑有和两个数字),可得
对于某一个数字,可调用的火柴棒共有10个
由于使用火柴棒数量最少的要使用2根,所以我们假设两个数字都为,但是显然这样是不成立的,因为就已经达到了,没有火柴棒再放第三个数字,那么由此可粗略得出
对于某一个数字,它最高有5位
于是我们可以选择枚举到,洛谷的评测机上也不会TLE
当然CCF的老爷机就不一定了(
于是我们可以选择再精确一点
// 未完待续
枚举之后相加,取出所用的火柴棒数,进行判断就好了
预处理思路
火柴棒数怎么求?
新建一个数组 f[10000 * 2 + 10] ,表示i这个数字需要用f[i]根火柴
题目已经给出了f[09],如何处理出f[10(10000*2)]?
1 |
|
循环一遍就好了
代码实现
1 |
|
- 本文作者:Handwer STD
- 本文链接:https://blog.handwer-std.top/2018-07-15/Luogu-P1149/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!