题目链接:https://ac.nowcoder.com/acm/contest/371/A
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
题目描述
小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n/k的等式有多少种(B+A=n与A+B=n看作一种)
注:
“=”与“+”分别需要使用2根火柴棒
输入描述
一行2个整数n,k,保证n取模k为0
输出描述
一行一个整数,表示答案。
输入
60 2
100000 1250
输出
4
3092
说明
样例1:
11+49=60
13+47=60
17+43=60
19+41=60
备注:
对于30%的数据,0<=n<=100
对于50%的数据,0<=n<=1000000
对于100%的数据,0<=n<=50000000;A,B>=0
解题思路
先把1到n每个数字需要的火柴数求出来,然后枚举等式就行了。
#include <bits/stdc++.h>
using namespace std;
int a[50000005], b[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int main() {
int n, k, m, ans = 0;
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++)
a[i] = a[i / 10] + b[i % 10];
m = n / k - a[n] - 4;
for (int i = 0, j = n; i <= j; i++, j--)
if (a[i] + a[j] == m)
ans++;
printf("%d\n", ans);
return 0;
}