题目
思路
考虑倒着跑,再去掉操作1,然后就变成了冰雹……
但是负数会出环……
所以我们需要用操作1把负数变成正数
考虑环的最低点可以在哪,经暴力后发现有0,-1,-5,-17
然后直接上操作1,接下来再继续冰雹,然后A了
赛时90就离谱……遗憾总rank 8
code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<deque>
#include<string>
using namespace std;
int q,d,l;
int n,s;
void dgg(int x)
{
if (x==1)
{
return;
}
if (min(abs(x),abs(x+d))<=l&&(x==0||x==-5||x==-1||x==-17))
{
dgg(x+d);
s++;
return;
}
if (x&1) dgg(x*3+1);
else dgg(x/2);
s++;
return;
}
void dg(int x)
{
if (x==1)
{
printf("%d ",x);
return;
}
if (min(abs(x),abs(x+d))<=l&&(x==0||x==-5||x==-1||x==-17))
{
dg(x+d);
printf("%d ",x);
return;
}
if (x&1) dg(x*3+1);
else dg(x/2);
printf("%d ",x);
return;
}
int main()
{
cin>>q>>d>>l;
while (q--)
{
cin>>n;
s=0;
dgg(n);
cout<<s<<' ';
dg(n);
puts("");
}
return 0;
}