题解
如果直接枚举m的倍数,对于某些很大的答案时肯定会超时。
DFS搜索19位用01组合出的十进制数字,直接对m取模检测是否满足为m的倍数。
注意需要使用unsigned long long来保存数值(不断WA发现答案为19位)。
AC代码
#include <stdio.h>
#include <iostream>
#define fst first
#define sed second
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
int n, f;
void DFS(int d, unsigned long long m)
{
if (d == 19)
{
if (m && m % n == 0)
cout << m << endl, f = 0;
return;
}
if (f)
DFS(d + 1, m * 10), DFS(d + 1, m * 10 + 1);
}
int main()
{
#ifdef LOCAL
//freopen("C:/input.txt", "r", stdin);
#endif
while (cin >> n, n)
f = 1, DFS(0, 0);
return 0;
}
本文介绍了一种使用深度优先搜索(DFS)的方法来找出由0和1组成的19位十进制数中能被m整除的最大数。通过递归地构建数字并检查其是否为m的倍数,该算法有效地解决了问题。
688

被折叠的 条评论
为什么被折叠?



