题解|#可爱の星空#

可爱の星空

https://ac.nowcoder.com/acm/contest/24213/1003

对于某个数量的星星来说,它的连同的最小代价应该是将其折半后拼接,那么折半后折半下来的其余部分也按照这样折半的思路去,之后全部相加就是最小的代价。
//以星星为第一维,那么每加入一个星星能够得到的代价作为二维。
#include <bits/stdc++.h>

using namespace std;
#define int long long
int dfs(int depth) {
    if (depth==0) return 0;
    if (depth==1) return 0;
    if (depth==2) return 0;
    if (depth==3) return 1;
    if (depth&1) {
        return dfs(depth/2)+dfs(depth/2+1)+1;
    }
    return dfs(depth/2)*2;
}

signed main() {
    int T;
    cin>>T;
    while (T--) {
        int n;
        cin>>n;
        cout<<dfs(n)<<endl;
    }
    
    return 0;
}


全部评论

相关推荐

永不遗忘:才这么点算什么拉黑,我初筛连着挂几十次了,最后还是能进面
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务