题目
题目大意就是 你可以让当前速度变大为此时的3倍或者缩小为此时的3分之一。从1s开始进行操作。问到达ts(并且此时速度为1)的时候需要几秒。
思路
看到这道题我就想起在swustoj上面做过的一道题,因为我们是从1s的时候开始的。
我们就设一个x为3,我们现在需要走t-1个时间,就判断一下需要走的时间是否大于等于2*x,因为我们如果在前面加速,必定在后面减速。所以就有了这个代码。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
int main()
{
//freopen("test.in","r",stdin);//设置 cin scanf 这些输入流都从 test.in中读取
//freopen("test.out","w",stdout);//设置 cout printf 这些输出流都输出到 test.out里面去
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
ll t;
cin>>t;
if(t<=3)
{
cout<<t<<endl;
return 0;
}
ll ans=1;
t-=1;
ll x=3;
while(t)
{
if((t-2*x)>=0)
{
ans+=2;
t-=2*x;
x*=3;
}
else if(t>=x)
{
t-=x;
x/=3;
ans+=1;
}
else
{
x/=3;
}
}
cout<<ans<<endl;
return 0;
}