acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 资讯
  • 竞赛
  • 讨论
  • 团队
  • 商城
登录
注册
题目详情提交记录(0)
  • 题解(部分逃课版)

    题意分析想要推出尽可能多的补给舱,贪心策略:优先选消耗燃料最小的! 步骤: 将数组 R 从小到大排序 预处理前缀和数组 sum,sum[k] 表示选出前 k 个最小补给舱一共需要多少燃料 每次询问给定 X,在前缀和数组上二分查找最大的 k,满足 sum[k] <= X 关键点 N,Q<=2e5,暴力每个询问遍历会超时,必须前缀和 + 二分 O(Nlog N + Qlog N) 数值极大,要用 long long(64 位整数),不能用 int! sum[0]=0:选 0 个消耗 0 燃料 样例 2 演算输入:4 3 5 3 11 8 16 7 1000 排序后:3,5,8,11 前缀和: (sum[0]=0) (sum[1]=3) (sum[2]=8) (sum[3]=16) (sum[4]=27) X=16:最大 k=3 X=7:只能满足 sum [1]=3 → k=1 X=1000:全部满足 → k=4 和样例输出完全一致。 重要细节说明 全部燃料变量必须 long long(#define int long long) upper_bound(A.begin(),A.end(),X) 返回第一个大于 X的迭代器,减去起始地址得到索引,再减一就是最多能选的数量。 partial_sum(a.begin(),a.end(),pre.begin()+1);是前缀和函数;

    userId_undefined
    tyrs
    出道萌新循环·循环打卡人分支·分支解题者I/O·IO入门者格式·格式排版员数组·数组操作员
    1阅读
    0回复
    0点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页