题解 P1988 【火炬】

· · 题解

既然大家都已经说过了,这题是个爆搜,那为啥要把代码写这么长啊。 没搞懂各位大佬们搜的啥? 直接把 0和1 组成的数搜出来不就好了。 要想判断是不是最优解的话,先搜0,再搜1,实在不放心排一下序。 我的代码,应该不叫简单可读吧。

/*.........................
作者:Manjusaka
时间:2018/7/11
题目:P1988 火炬
..........................*/

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue> 
using namespace std;
long long n,tot,a[1000000];
void dfs(long long x)
{
    a[++tot]=x;
    if(x>9e17)return;
    for(int i=0;i<=1;i++)
        dfs(x*10+i);
}
int main()
{
    scanf("%lld",&n);
    dfs(1);
    sort(a+1,a+1+tot);
    for(int i=1;i<=tot;i++)
    {
        if(a[i]%n==0)
        {
            cout<<a[i]/n;
            return 0;
        }
    }
    printf("No Solution");
}