返回题解分享
讨论 / 题解分享/ 帖子详情

砍竹子(编程题) - 题解

#include <bits/stdc++.h>
#define int long long
using namespace std;

int n;
vector<unordered_set <int>> hh; // 无序集记录对每棵竹子操作后得到的高度

int ff(int x) {
    return sqrt(x / 2 + 1);
}

signed main()
{
    cin >> n;
    hh.resize(n + 1);

    int ans = 0;
    for(int i = 1; i <= n; i ++ ) {
        int x;
        cin >> x;

        while(x > 1) {
            if(!hh[i - 1].count(x)) ans ++ ; // 前一棵竹子操作过程中与当前竹子此时高度相同可以一起
            hh[i].insert(x); // 将当前竹子高度记录
            x = ff(x); // 砍竹子
        }
    }

    cout << ans;
}
0 回复 0 转发 0 喜欢 2 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!