Nezzar's favorite digit among 1,…,91,…,9 is dd. He calls a positive integer lucky if dd occurs at least once in its decimal representation.
Given qq integers a1,a2,…,aqa1,a2,…,aq, for each 1≤i≤q1≤i≤q Nezzar would like to know if aiai can be equal to a sum of several (one or more) lucky numbers.
The first line contains a single integer tt (1≤t≤91≤t≤9) — the number of test cases.
The first line of each test case contains two integers qq and dd (1≤q≤1041≤q≤104, 1≤d≤91≤d≤9).
The second line of each test case contains qq integers a1,a2,…,aqa1,a2,…,aq (1≤ai≤1091≤ai≤109).
For each integer in each test case, print "YES" in a single line if aiai can be equal to a sum of lucky numbers. Otherwise, print "NO".
You can print letters in any case (upper or lower).
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
In the first test case, 24=17+724=17+7, 2727 itself is a lucky number, 2525 cannot be equal to a sum of lucky numbers.
思路:对于任意的ai,如果ai大于等于10*d(这里有点不好判断,赛中我判断到大于100去了,就一直错),一定能拆成n*10+m*d的形式(n和m是待定系数)或一个lucky数+m*d的情况,一定有解;对于小于10*d的数,如果能拆成n*10+m*d的形式(n和m是待定系数),则有解,否则无解。
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e4+7; int t,n,d,y; int main() { cin>>t; while(t--) { cin>>n>>d; for(int i=1;i<=n;i++) { cin>>y; if(y>=10*d) { cout<<"YES"<<endl; } else { int f=0; for(int j=1;j<=10;j++) { int z=(j*d)%10; if(z==y%10) { if(j*d==y)cout<<"YES"<<endl; else if(y-j*d>=10)cout<<"YES"<<endl; else cout<<"NO"<<endl; f=1; break; } } if(!f)cout<<"NO"<<endl; } } } }