#698(Div。2)B。ネザールとラッキーナンバー(数学)

タイトル説明

1、…、9の中でネザールのお気に入りの数字はdです。彼は、dが10進表現で少なくとも1回出現する場合、正の整数をラッキーと呼びます。
q個の整数a1、a2、…、aqが与えられた場合、1≤i≤qごとにNezzarは、aiがいくつかの(1つ以上の)幸運数の合計に等しくなるかどうかを知りたいと考えています。

入力

最初の行には、単一の整数t(1≤t≤9)—テストケースの数が含まれています。
各テストケースの最初の行には、2つの整数qとdが含まれています(1≤q≤104、1≤d≤9)。
各テストケースの2行目には、q個の整数a1、a2、…、aq(1≤ai≤109)が含まれています。

出力

aiがラッキー数の合計に等しくなる可能性がある場合は、各テストケースの整数ごとに「YES」を1行に出力します。それ以外の場合は、「NO」と出力します。
どんな場合でも(上または下)文字を印刷できます。

入力
2
3 7
24 25 27
10 7
51 52 53 54 55 56 57 58 59 60
出力
YES
NO
YES
YES
YES
NO
YES
YES
YES
YES
YES
YES
NO

注意

最初のテストケースでは、24 = 17 + 7、27自体がラッキーナンバーであり、25はラッキーナンバーの合計と等しくなることはできません。

一般的なアイデア

あなたにd、1 <= d <= 9を与えます。xのいずれかがdである限り、xはラッキーナンバーと呼ばれます。ここで、1つ以上のラッキーナンバーの合計で表すことができるかどうかを判断するためのナンバーを与えます。

トピック分析

結論から始めましょう。xの単位桁がdの倍数の単位桁に等しく、xがこのdの倍数以上である場合、xは要件を満たします

この結論を証明させてください。
xが要件を満たす数であると仮定すると、x> n ∗ d x> n * dバツ>>ndおよびx%10 == n * d%10。ラッキーナンバーxをどのように分解できるか見てみましょう。

x = [(n − 1)∗ d] + [(x / 10 −(n ∗ d / 10))∗ 10 + d] x = [(n-1)* d] + [(x / 10-( n * d / 10))* 10 + d] バツ=[ n1 d ]+[ x / 1 0nd / 1 0 1 0+d ]

xはn-1dと[(x / 10 −(n ∗ d / 10))∗ 10 + d] [(x / 10-(n * d / 10))* 10 + d]に分解できます[ x / 1 0nd / 1 0 1 0+d ]これらのn個の数。ただし、上記の結論を満たさない数は分解できません。

コードは以下のように表示されます
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <map>
#include <queue>
#include <vector>
#include <set>
#include <bitset>
#include <algorithm>
#define LL long long
#define PII pair<int,int>
#define x first
#define y second
using namespace std;
const int N=2e5+5;
bool check(int x,int d)			//判断x是否合法的函数
{
    
    
	if(x>=10*d) return true;	//nd(1<=n<=10)的个位数包含了0-9所有的个位数,因此大于等于10*d的x一定是合法的
	for(int i=1;i*d<=x;i++)				//枚举所有小于等于x的d的倍数
		if(i*d%10==x%10) return true;	//如果有符合条件的则返回true
	return false;
}
int main()
{
    
    
    int t;
	scanf("%d",&t);
	while(t--)
	{
    
    
		int n,d;
		scanf("%d%d",&n,&d);
		while(n--)
		{
    
    
			int x;
			scanf("%d",&x);
			if(check(x,d)) puts("YES");
			else puts("NO");
		}
	}
    return 0;
}

おすすめ

転載: blog.csdn.net/li_wen_zhuo/article/details/113395605