1. 程式人生 > >第八屆省賽 B:Quadrat (打表找規律)

第八屆省賽 B:Quadrat (打表找規律)

bsp UC amp ext log test case sequence pan cto

Description

It is well-known that for any n there are exactly four n-digit numbers (including ones with leading zeros) that are self-squares: the last ndigits of the square of such number are equal to the number itself. These four numbers are always suffixes of these four infinite sequences:

...0000000000
...0000000001
...8212890625
...1787109376

For example, 093762 =87909376, which ends with 09376.

You are required to count the numbers that are almost self-squares: such that each of the last n digits of their square is at most d away from the corresponding digit of the number itself. Note that we consider digits 0 and 9 to be adjacent, so for example digits that are at most 3 away from digit 8 are 5, 6, 7, 8, 9, 0 and 1.

Input

The first line contains the number of test cases t,1≤t≤72. Each of the next t lines contains one test case: two numbers n(1≤n≤ 18) and d(0≤ d≤3).

Output

For each test case, output the number of almost self-squares with length n and the (circular) distance in each digit from the square at most d

in a line by itself.

Sample Input

2
5 0
2 1

Sample Output

4
12

Hint

In the second case, number 12‘s almost self-squares are: 00, 01, 10, 11, 15, 25, 35, 66, 76, 86, 90, 91

題意:

求滿足以下條件

①.這個數為n位(可以有前導零)

②.取它的平方的後n位,與它本身每一位對應之差≤d(這裏的差指的是數字之間的距離,而這個距離是將數字按圈排列,0與9相鄰所求得的)

的數字的個數。

題解:

打表吧

規律就是 res[i][j] = res[i-1][j]*(2*j+1)

代碼:

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
using namespace std;
#define is_lower(c) (c >= ‘a‘ && c <= ‘z‘)
#define is_upper(c) (c >= ‘A‘ && c <= ‘Z‘)
#define is_alpha(c) (is_lower(c) || is_upper(c))
#define is_digit(c) (c >= ‘0‘ && c <= ‘9‘)
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
#define IO                 \
  ios::sync_with_stdio(0);   cin.tie(0);                cout.tie(0);
#define For(i, a, b) for (int i = a; i <= b; i++)
typedef long long ll;
typedef unsigned long long ull;
const ll inf = 0x3f3f3f3f;
const double EPS = 1e-10;
const ll inf_ll = (ll)1e18;
const ll mod = 1000000007LL;
const int maxn = 1000000;
ll res[20][5];
void init() {
    res[1][0] = res[1][1] = 4;
    res[1][2] = res[1][3] = 8;
    for(int i = 2; i < 20; i++) {
        for(int j = 0;j <= 3; j++)
            res[i][j] = res[i-1][j] * (2 * j + 1);
    }
}
int main() {
    init();
    int T;
    cin >> T;
    while(T--){
        int n,d;
        cin>>n>>d;
        cout << res[n][d] << endl;
    }
    return 0;
}

第八屆省賽 B:Quadrat (打表找規律)