题意:第i个土豆重量为3^(i-1) ,求在所有取土豆方案里第k重的总重。
题解:既然每个土豆的重量都是3^(i-1),所以就很自然的跟二进制数联想在了一起,我们可以用二进制数来表示方案的选择,比如最小的方案选择一定是0001,只选择了第一个土豆,第二大方案就是0010(0001+1),依次类推我们可以得到就是比较k转换成二进制之后,第i位上是否有1,如果有就在答案上+3^(i-1),最后注意输出格式即可
#include <bits/stdc++.h> using namespace std; typedef long long ll; int _,sign; ll k,t,ans; int main(){ for (scanf("%d",&_);_;_--){ scanf("%lld",&k); ans=0;t=1; for (int i=0;i<40;i++){ if ((1ll<<i)&k){ ans+=t; } t*=3; } printf("Case #%d: %lld\n",++sign,ans); } return 0; }