题意
一个数字,判断是否能由11,111,1111,11111…组成
解析
数据量1e9,不能用背包解决,因此观察数据,发现11101=1111,111101=11111,因此x=a∗11+b∗101x=a*11+b*101x=a∗11+b∗101,我们只需要枚举其中一个,再判断另外一个是否能被整除即可。发现b=12的时候,x=a∗11+(11+1)∗101=>x=(a+101)∗11+101x=a*11+(11+1)*101=>x=(a+101)*11+101x=a∗11+(11+1)∗101=>x=(a+101)∗11+101,因此枚举12次b即可,不会超时。
代码
#include<iostream>
#include<vector>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int x;
cin >> x;
bool f = 0;
for (int k = 0;(long long)k * 111 <= x;k++) {
int j = x - (k * 111);
if (j % 11 == 0) {
f = 1;
break;
}
}
if (f) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
}