Codeforces 727A dfs打印路径

来源:互联网 发布:excel表格怎么填充数据 编辑:程序博客网 时间:2024/06/10 02:29

题意:
就是给个a和b,可以对a做两种操作,a=a*2或者a=a*10+1。问你是否能通过这两个操作变成b。如果能的话打印路径。
dfs即可。

#include<bits/stdc++.h>using namespace std;#define mod 1000000007#define PI acos(-1.0)#define INF 0x3f3f3f3ftypedef long long LL;typedef unsigned long long ULL;LL a,b;int ok;const int maxn=100000;LL ans[maxn];void dfs(int d,int cnt,LL x){    if(x>b)return ;    if(ok)return ;    ans[cnt]=x;    if(x==b){        ok=cnt;        return ;    }    dfs(d+1,cnt+1,x*2);    dfs(d+1,cnt+1,x*10+1);}int main(){    ok=0;    scanf("%I64d%I64d",&a,&b);    dfs(1,1,a);    if(!ok)printf("NO\n");    else {    printf("YES\n%d\n",ok);    printf("%I64d",ans[1]);    for(int i=2;i<=ok;i++)        printf(" %I64d",ans[i]);}    return 0;}
0 0
原创粉丝点击