题目描述:
输入文件:标准输入
输出文件:标准输出
时间限制:1秒
内存限制:256兆字节
s = 0.5,实数0 ≤ a ≤ 1
您可以选择以下两种操作之一:
1.a = a*s
2 . a =(a-1)*s+1
现在你应该用最多50步使a等于目标数b。
如果| x y |<=1e-4,则两个数xy相等
可以证明答案是存在的
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int t = 0;
void dfs(double a ,double b,string s)
{if (t) return;//表示有答案了,清空if (s.size()>=50) {//超过范围剪枝return;}if (fabs(a - b) <= 1e-4) {//符合答案t = 1;cout << s;//输出return;}dfs(a * 0.5, b, s+'1');//两步dfsdfs((a-1)*0.5+1, b, s + '2');}
int main()
{double a,b;string s;cin >> a >> b;dfs(a, b, s);return 0;
}