火柴棒等式 题解 FROM CSDN
2023-08-18 18:26:03
发布于:广东
99阅读
0回复
0点赞
题解:
因为<=,我们马上看出来,这个等式能模拟出的最大的数字绝对不会大于,所以我们考虑表示出-的所有数字,基于这个开始枚举,最后得出答案。
是的,有些事情就是这么巧妙,什么打表啊,枚举啊,模拟啊,都是智慧的结晶,请大家不要嗤之以鼻。
所以我们开始模拟。
先处理出的数组保存的是当数组下标为的时候,需要几根火柴模拟出来。为什么数组要开呢?因为后来判断的时候要,而和都是规模的,不开会RE。
然后我们打表处理出数组,表示拼出数字,注意是数字的时候需要几根火柴,然后就可以按位表示了。应该很简单。
最后判断,不用多说了。
注意要加。
所以就AC了:
#include<cstdio>
using namespace std;
int n,ans;
int a[2001];
int m[]={6,2,5,5,4,5,6,3,7,6};
int main()
{
scanf("%d",&n);
a[0]=6;
for(int i=1;i<=2000;i++)
for(int j=i;j>=1;j/=10)
a[i]=a[i]+m[j%10];
for(int i=0;i<=1000;i++)
for(int j=0;j<=1000;j++)
if(a[i]+a[j]+a[i+j]+2+2==n)
ans++;
printf("%d",ans);
return 0;
}
这里空空如也
有帮助,赞一个