题目链接: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;
}