【洛谷 1988】火炬

题目描述

2008北京奥运会,你想成为四川汶川的一名火炬手,经过层层选拔,终于到了最后一关,这一关是一道很难的题:任意给定一个正整数N(N<=100000),求一个最小的正整数M,使得N * M的十进制表示形式里只含有1和0。

输入格式

一行,输入一个整数N。

输出格式

输出一行,如果有解,输出最小的M,否则输出“No Solution”

输入输出样例

输入 #1
12
输出 #1
925

题解;bfs(或dfs)的进制转换。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;
ll n,t,a[1000002];
void dfs(ll x){
    a[++t]=x;
    if(x>9e17)return;
    for(int i=0;i<=1;i++)
        dfs(x*10+i);
}
int main(){
    //freopen("1988.in","r",stdin);
    //freopen("1988.out","w",stdout);
    scanf("%lld",&n);
    dfs(1); sort(a+1,a+1+t);
    for(int i=1;i<=t;i++)
        if(a[i]%n==0)
           { cout<<a[i]/n; return 0; }
    printf("No Solution");
}

 

posted @ 2019-11-03 20:08  #Cookies#  阅读(109)  评论(0编辑  收藏  举报