VijaySue 2022-10-28 13:38 采纳率: 100%
浏览 74
已结题

关于砍竹子问题,如何解决?

请问各位神犇我这个为什么WA了。

img

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
inline ll fun(const ll& h) {
    return sqrt(h / 2 + 1);
}
int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    ll* arr = new ll[n];
    int ans = 0;
    for (ll i = 0; i != n; ++i) cin >> arr[i];
    while (1) {
        ll max = *max_element(arr, arr + n);
        if (max == 1) break;
        int j = 1;
        for (int i = 0; i != n; ++i) {
            if (arr[i] == max) {
                if (arr[i] == 1) continue;
                arr[i] = fun(arr[i]);
                while (i + j < n && arr[i + j] == max) {
                    arr[i + j] = fun(arr[i + j]);
                    ++j;
                }
                ++ans;
            }
        }
    }
    cout << ans << '\n';
    return 0;
}

img

  • 写回答

2条回答 默认 最新

  • ...,,,,,, 2022-10-28 16:41
    关注

    应该是数据规模的问题,当数组下标超过一百万时,有可能会出错,所以试试用队列priority_queue,看看这个http://t.csdn.cn/27ziN
    然后应该就差不多了,(但我只拿了70分)

    #include <bits/stdc++.h>
    using namespace std;
    long long h,hnew,ans,n,rnk;
    priority_queue<pair<long long,int>,vector<pair<long long,int>>,less<pair<long long,int>>>q;
    int main(){
        cin.tie(0),cout.tie(0);
        ios::sync_with_stdio(false);
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>h;
            if(h!=1)q.push({h,i});//高度为1就不用砍了
        }
        while(!q.empty()){
            h=q.top().first,rnk=q.top().second;
            q.pop();
     
            hnew= sqrt(h/2+1);
            if(hnew!=1)q.push({hnew,rnk});
            while(!q.empty()&&q.top().first==h&&q.top().second==rnk-1){
                rnk--;
                q.pop();
                if(hnew!=1)
                    q.push({hnew,rnk});
            }
            ans++;
        }
     
        cout<<ans;
        return 0;
    }
    

    望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月28日
  • 已采纳回答 10月28日
  • 修改了问题 10月28日
  • 修改了问题 10月28日
  • 展开全部

悬赏问题

  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂