Description
给定起始数字 a (1<=a<=10^5) 还有终止数字 b (0<=b<=10^8)我们现在有三种操作方法:
- 给当前的数字 x 乘3
- 给当前的数字 x 乘5
- 给当前的数字 x 除7 (向下取整)
如果十步之内(包含第十步)我们发现能从数字 a 最后到达数字 b 并且在操作的过程中都是 正整数 ,那么就输出 YES
否则输出 NO
Format
Input
输入数字 a,b (1<=a<=10^5,0<=b<=10^8)
Output
如果能十步内到达则输出 YES
否则输出NO
Samples
输入数据 1
5 65
Copy
输出数据 1
YES
Copy
输入数据 2
14 982
Copy
输出数据 2
NO
Copy
Limitation & hint
对于样例1来说: 我们可以通过如下操作得到 bb :a−>(a×3=15)−>(a×3=45)−>(a×5=225)−>(a/7=32)−>(a×3=96)−>(a/7=13)−>(a×5=65)
1s, 2048KiB for each test case.
这是一道dfs题
注意:
从步数是 0 开始的,所以第十步就是9,所以小于等于 10 的时候结束。
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
using namespace std;
#define ll long long
ll n,m,ans=0;
struct node {
ll x,step;
};
int k=0;
void dfs(ll x,ll step) {
if(x==m&&step<=10&&k==0) {
cout<<"YES"<<endl;
k=1;
return;
}
if(x<0)
return;
if(step<10&&!k) {
dfs(x*3,step+1);
dfs(x*5,step+1);
dfs(x/7,step+1);
}
}
int main() {
cin>>n>>m;
dfs(n,0);
if(!k)
cout<<"NO"<<endl;
return 0;
}