首页 > 其他分享 >2024初秋集训——提高组 #27

2024初秋集训——提高组 #27

时间:2024-09-28 17:45:45浏览次数:1  
标签:27 const int ll 2024 思考 using return 初秋

B. 抉择

题目描述

给定 \(N\) 个数 \(A_1,A_2,\dots,A_N\),求一个 \(A\) 的子序列 \(B\) 的 \(\sum \limits_{i=1}^{k-1} B_i \operatorname{AND} B_{i+1}\) 的最大值。

思路

令 \(dp_i\) 表示最后一个数是 \(A_i\) 的最大答案。我们很明显有转移 \(dp_i\leftarrow dp_j+A_j \operatorname{AND} A_i\)。

贪心地思考,我们肯定要使子序列的长度尽可能长。所以我们肯定会从尽可能近的地方转移过来。所以我们对于每一位求出上次出现的位置并转移即可。

空间复杂度 \(O(N)\),时间复杂度 \(O(N\log \max\{A_i\})\)。

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

const int MAXN = 1000001;
const ll INF = (ll)(1e18);

int n;
ll a[MAXN], dp[MAXN], last[41], ans;

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n;
  for(int i = 1; i <= n; ++i) {
    cin >> a[i];
    for(int j = 0; j <= 40; ++j) {
      dp[i] = max(dp[i], dp[last[j]] + (a[last[j]] & a[i]));
      if((a[i] >> j) & 1) {
        last[j] = i;
      }
    }
    ans = max(ans, dp[i]);
  }
  cout << ans;
  return 0;
}

[C. 重生](重生(rebirth) - 题目详情 - SeekLuna (robo-maker.cn))

题目描述

你有 \(N\) 个任务,第 \(i\) 个任务需要 \(t_i\) 天。你的一次生命有 \(c\) 天。你可以对一个任务进行深入思考,使得需要时间减 \(d_i\) 天,但你在一次生命中对一个任务只能思考一次。如果需要天数 \(\le 0\) 则无需时间便可解决。你可以复活,每次复活会再给你一次生命,之前深入思考的结果不会丢失。在最后一次生命之前你不能做任务,只能思考。求至少要复活多少次。

思路

二分需要复活的次数 \(x\)。我们把任务按 \(d_i\) 从大到小排序,显然我们必然优先把 \(d_i\) 大的进行思考。

但是对于最后一次思考要特殊处理,因为最后一次思考要不然是在最后一条命进行的,要么是再思考就降为 \(0\)。这里我们对最后一次的减少天数从大到小排序,然后一个一个做直到次数不够了位置,最后判断是否能做完即可。

空间复杂度 \(O(N)\),时间复杂度 \(O(N\log N\log \sum t_i)\)。

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, ll>;

const int MAXN = 200001;

struct Node {
  ll t, d;
}s[MAXN];

int T, n, c;

bool check(ll x) {
  ll sum = 0, cnt = 0, tc = c;
  vector<pii> ve;
  for(int i = 1; i <= n; ++i) {
    sum += s[i].t;
    ll v = min(x, s[i].t / s[i].d);
    sum -= v * s[i].d;
    cnt += v;
    if(s[i].t - v * s[i].d) {
      ve.emplace_back(min(s[i].d, s[i].t - v * s[i].d), v == x);
    }
  }
  sort(ve.begin(), ve.end(), [](const pii &a, const pii &b) -> bool {
    return a.first > b.first;
  });
  for(auto [a, b] : ve) {
    if(cnt >= (__int128)(x + 1) * c) {
      break;
    }
    sum -= a;
    tc -= b;
    cnt++;
  }
  return sum <= min((__int128)tc, (__int128)(x + 1) * c - cnt);
}

ll Binary_Search() {
  ll l = 0, r = (ll)(3e14);
  for(; l < r; ) {
    ll mid = (l + r) >> 1;
    (check(mid) ? r = mid : l = mid + 1);
  }
  return l;
}

void Solve() {
  cin >> n >> c;
  for(int i = 1; i <= n; ++i) {
    cin >> s[i].t >> s[i].d;
  }
  sort(s + 1, s + n + 1, [](const Node &a, const Node &b) -> bool {
    return a.d > b.d;
  });
  cout << Binary_Search() << "\n";
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  for(cin >> T; T--; Solve()) {
  }
  return 0;
}

标签:27,const,int,ll,2024,思考,using,return,初秋
From: https://www.cnblogs.com/yaosicheng124/p/18438208

相关文章

  • 20240925 随机训练
    LinkUpdateMax将总贡献拆成每个位置单独的贡献。假设一共有\(m\)个数未确定。如果\(a_i\neq-1\),那么产生贡献的条件就是:前面每个\(a_j<a_i\)。前面填充的\(cnt\)个空的数都要小于\(a_i\)。第一个条件可以直接判断,第二个考虑使用组合数学。由于只能使用那些小......
  • [DMY]2024 CSP-S 模拟赛 Day 6
    前言离A掉一道题最近的一次。过程看完T1以后,想先构一个\(\mathcal{O}(n^3)\)的暴力,但是发现只有10pts,而且算法复杂度接近\(\mathcal{O}(n^4)\),所以果断放弃。把链的限制写了(然后亏大了),然后开始在CS上面画画。画了一会发现一个简单的dp思路,但是是\(\mathcal{O}(n^......
  • SolidWorks.2024.SP3.1图文安装教程及下载
    SOLIDWORKS2024引入了一系列新功能和性能改进,‌旨在提升用户在设计、‌仿真、‌数据管理和制造等方面的效率和创新能力。‌安装前准备工作:【rjqjf.com】首先检查一下NETFramework3.5和4.0是否已安装。如果未安装.NETFramework3.5(包括.NET2.0和3.0),请转到“控制面板”->“......
  • NOIP2024集训Day37 DP
    NOIP2024集训Day37DPA.[CQOI2011]放棋子设\(f_{i,j,k}\)表示前\(k\)种棋子放了任意\(i\)行、\(j\)列。决策是:在哪些位置填同种颜色的棋子。于是美剧上一个状态的\(i,j\)(表示为\(l,r\)),上一状态\(k_1=k-1\)。设\(g_{i,j,k}\)表示\(k\)个同种颜色的......
  • 《2024 Java 就业前景深度洞察报告》
    《2024Java就业前景深度洞察报告》一、核心观点1.1Java就业前景光明,持续引领技术潮流Java作为一种广泛应用于软件开发的编程语言,在当今的技术领域中占据着重要地位。它具有强大的跨平台性、稳定性和安全性,使得众多企业在开发关键业务系统时首选Java。随着信息技术......
  • 2024 年全国大学生新质生产力大赛—数学建模赛项题目 B:金融违规交易的大数据分析 问题
    针对问题三,我们可以采取以下步骤进行聚类分析,并统计不同国家的涉案人员数量和交易金额总数。以下是具体的分析思路和方法:1.数据预处理清洗数据:确保数据中没有缺失值,并将需要的字段转换为合适的数据类型。选择聚类特征:选择与洗钱风险评分相关的指标作为聚类特征,例如交易金......
  • 2024java社招面试(亲身经历8w字,更新中)
    一、Java基础部分面试题1.Java面向对象的三个特征封装:对象只需要选择性的对外公开一些属性和行为。继承:子对象可以继承父对象的属性和行为,并且可以在其之上进行修改以适合更特殊的场景需求。多态:允许不同类的对象对同一消息做出响应。2.Java中基本的数据类型有哪些以......
  • 网络安全(黑客技术)-2024自学手册
    一、什么是网络安全  网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。  无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web 安全技术,既......
  • Springboot流浪动物救助管理系统y7274(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,动物信息,申领信息,回访信息,动物分类,撤销申领开题报告内容一、选题背景与意义面对日益增长的流浪动物问题,社会对于高效、有序的救助管理需求日......
  • MindFusion Pack for Java Swing 2024.R1 Crack
    MindFusionPackforJavaSwingJavaDiagramDiagrammingJavaSwingSchedulerSchedulingJavaSwingSpreadsheetSpreadsheetJavaSwingChartCharts&GaugesJavaSwingVirtualKeyboardVirtualKeyboardDiagramsIfyourJavaapplicationneedstodrawaflow......