题意:就是给你一个数n,让你求出最小的数k,这个数大于等于n,同时这个数可以写成 k=3x+3y+… 3z 保证x!=y!=z!=…, 让你求出符合条件的最小的k
思路:这个题的话可以通过枚举3的倍数,能减的话(符合 k-i>=n的情况下)直接把它减去了,相当于是把3的倍数全都枚举了,时间复杂度的话应该是 t*log 3n
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll n;
scanf("%lld",&n);
ll k=0,i=1;
while(k<n)
{
k+=i;
i*=3;
}
while(i)
{
if(k-i>=n)
{
k-=i;
}
i/=3;
}
printf("%lld\n",k);
}
return 0;
}