牛客月赛86+cf(edu)好题

思路:前缀和+双指针

代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
int main() {
  cin.tie(nullptr)->sync_with_stdio(false);
  cout << fixed << setprecision(20);
  int t = 1;
  for (int ti = 0; ti < t; ti += 1) {
    int n, W;
    cin >> n >> W;
    vector<i64> w(n + 1), d(n + 1);
    for (int i = 1; i <= n; i += 1) {
      cin >> w[i];
      w[i] += w[i - 1];
    }
    for (int i = 1; i <= n; i += 1) {
      cin >> d[i];
      d[i] += d[i - 1];
    }
    i64 ans = -1e18, mn = 1e18;
    for (int i = 1, j = 0; i <= n; i += 1) {
      while (w[i] - w[j] >= W) {
        mn = min(mn, d[j]);
        j += 1;
      }
      ans = max(ans, d[i] - mn);
    }
    cout << ans;
  }
}

E. Increasing Subsequences

思路:首先如果有0,1,2......,x-1,那么有2^x种选择方案.考虑二进制拆分,首先构造出最高位的答案2^x种.然后从大到小遍历每一位,如果第i位是1,就在序列最后添加一个i,不难发现每添加一次数会让答案增加2^i,而且因为添加的数是递减的,所以不会相互干扰.

代码:

cpp 复制代码
void solve(){
    int n;
    cin >> n;
    int t = __lg(n);
    vector<int> ans;
    for(int i = 0; i < t; i++){
        ans.push_back(i);
    }
    for(int i = t - 1; i >= 0; i--){
        if (n >> i & 1){
            ans.push_back(i);
        }
    }
    cout << ans.size() << '\n';
    for(auto x : ans) cout << x << ' ';
    cout << '\n';
}
相关推荐
hnjzsyjyj几秒前
洛谷 P1305:新二叉树 ← DFS
数据结构·dfs
爱吃香芋派OvO1 分钟前
ComfyUI 视频创作实战手册:节点搭建 + 性能优化 + 批量生成
人工智能·算法·机器学习
数智工坊3 分钟前
【深度学习RL】A3C:异步强化学习的革命——用CPU打败GPU的深度RL算法
论文阅读·人工智能·深度学习·算法·transformer
灵智实验室4 分钟前
PX4状态估计技术EKF2详解(三):EKF2 外部视觉融合——延迟后验状态与触发机制
算法·无人机·px 4
爱吃提升8 分钟前
Yifan Hu(适合大规模数据)大数据算法
开发语言·算法·php
Xpower 178 分钟前
从PHM到AI Agent-如何用OpenClaw构建设备健康诊断智能体
网络·人工智能·学习·算法
洛水水14 分钟前
【力扣100题】24. 旋转图像
算法·leetcode
样例过了就是过了22 分钟前
LeetCode热题100 颜色分类
c++·算法·leetcode
ZPC821024 分钟前
C++ 跨平台 UDP 收发测试程序
c++·算法·机器人
如君愿24 分钟前
考研复习 Day 34 | 习题--计算机网络 第六章(应用层 下)、数据结构 查找算法(下)
数据结构·计算机网络·考研·课后习题