CSP-S 2024 简单题

以下均为考场做法。

T1 决斗 (duel)

考虑贪心,按照攻击力 \(a_i\) 排序,从小到大使用所有怪物进行攻击,每只怪物攻击一个在场且能击杀的怪物中,攻击力最大的一个。这样显然最优,因为每一次攻击都被完美的利用到了。

于是设 \(c_x\) 表示满足 \(a_i = x\) 的 \(i\) 的个数。按照 \(x\) 从小到大扫,维护一个变量 \(cnt\) 表示当前的怪物数量,初始为 \(0\),每次相当于 \(cnt \gets \max(cnt - c_x, 0) + c_x\)。表示先用攻击力为 \(x\) 的怪物击杀其他怪物,再加入这些怪物。

这样也可以证明答案为 \(\max c_x\)。考查 \(c\) 的单调栈即可。时间复杂度 \(O(n)\)。

T2 超速检测 (detect)

首先考虑将物理问题转化为 OI 问题。对于每辆车 \(i\) 求一个 \([l_i, r_i]\),表示 \(i\) 在路过第 \(l_i\) 至 \(r_i\) 个测速仪时超速,然后就比较好做了。

考场推法是这样的:一辆车,初始位置为 \(d\),初速度为 \(v_0\),加速度为 \(a\),则 \(t\) 秒后速度为 \(v_t = v_0 + at\),我们尝试写出一个方程 \(v_0 + at = V\),然后一定是一段前缀或者后缀合法。

先判掉一些 \(\text{Corner Case}\):若 \(v_0 > V\) 且 \(a > 0\),则后面全部超速。若 \(v_0 \le V\) 且 \(a < 0\),则永远不会超速。若 \(a = 0\),则只需考察是否有 \(v_0 > V\),同样可以规约到上面两种情况之一。

否则 \(v_0 +at = V\) 不会失效。解出 \(t = \frac{V - v_0}{a}\)。考虑在 \(0 \sim t\) 秒内的位移为 \(x = v_0t + \frac{1}{2} at^2\)。\(t\) 秒后位置为 \(d + v_0t + \frac{1}{2} at^2\)。代入 \(t\),得到 \(d + v_0(\frac{V - v_0}{a}) + \frac{1}{2}a(\frac{V - v_0}{a})^2 = d + \frac{V^2 - {v_0}^2}{2a}\),在测速仪的数组上二分这个位置即可。

最后考虑最前面讲的抽象问题怎么做。第一问显然是满足 \(l_i \le r_i\) 的 \(i\) 的个数。第二问考虑贪心,将所有区间 \([l_i, r_i]\) 按照右端点排序,每次能拖就拖,不能拖就在 \(r_i\) 处放一个测速仪,这个应该是简单的。

时间复杂度 \(O(n \log n)\)。

T3 染色 (color)

将红色和蓝色的涂色看成划分为两个子序列。容易想到设 \(f_{i, x, y}\) 表示,考虑了前 \(i\) 个位置,第一个序列结尾为 \(x\),第二个序列结尾为 \(y\) 的最大收益。

由于两个序列不区分,且放完 \(i\) 时一定有一个子序列的结尾为 \(a_i\),所以这个状态有一维是多余的,设 \(f_{i, x}\) 表示考虑前 \(i\) 个位置,一个序列结尾为 \(x\),另一个序列结尾为 \(a_i\) 的最大收益即可。

考虑 \(f_{i, x}\) 到 \(f_{i + 1, y}\) 的转移,有两种可能:

  • \(a_{i + 1}\) 和 \(a_i\) 在一个子序列,则这一步的收益为 \([a_{i + 1} = a_i] a_{i + 1}\),这是一个只与 \(i\) 有关的值。
  • \(a_{i + 1}\) 和 \(x\) 在一个子序列,则这一步的收益为 \([a_{i + 1} = x] a_{ i + 1}\)。

对于第一种转移,相当于一个全局加。对于第二种转移,注意到对于任意的 \(x\) 都会转移到 \(f_{i + 1, a_i}\),则我们只关心值最大的那个。分类讨论,\(a_{i + 1} = x\) 的情况只需做单点查。而 \(a_{i + 1} \neq x\) 的情况我们只关心全局 \(\max\)。于是对全局加打 \(tag\),然后维护全局 \(\max\) 即可。

时间复杂度 \(O(n \log n)\),其中 \(\log n\) 仅用于离散化。

CSP-S 2024 简单题的更多相关文章

  1. BZOJ 2683: 简单题

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 913  Solved: 379[Submit][Status][Discuss] ...

  2. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

  3. Bzoj4066 简单题

    Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 2185  Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...

  4. Bzoj2683 简单题

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

  5. 这样leetcode简单题都更完了

    这样leetcode简单题都更完了,作为水题王的我开始要更新leetcode中等题和难题了,有些挖了很久的坑也将在在这个阶段一一揭晓,接下来的算法性更强,我就要开始分专题更新题目,而不是再以我的A题顺 ...

  6. [BZOJ2683][BZOJ4066]简单题

    [BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ...

  7. HDU 1753 大明A+B(字符串模拟,简单题)

    简单题,但要考虑一些细节: 前导0不要,后导0不要,小数长度不一样时,有进位时,逆置处理输出 然后处理起来就比较麻烦了. 题目链接 我的代码纯模拟,把小数点前后分开来处理,写的很繁杂,纯当纪念——可怜 ...

  8. 团体程序设计天梯赛-练习集L1-014. 简单题

    L1-014. 简单题 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 这次真的没骗你 —— 这道超级简单的题目没有任何输入. ...

  9. bzoj 4066: 简单题 kd-tree

    4066: 简单题 Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 234  Solved: 82[Submit][Status][Discuss] De ...

  10. 又一道简单题&&Ladygod(两道思维水题)

    Ladygod Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

随机推荐

  1. HTML+CSS+JS实现的贪吃球小游戏【转】

    转载地址:[https://blog.csdn.net/qq_43115104/article/details/84228987] <!DOCTYPE html> <html> ...

  2. int128输入输出流

    using i128 = __int128; istream &operator>>(istream &is, i128 &x) { string s; is &g ...

  3. SMU Summer 2023 Contest Round 11(2022-2023 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2022))

    SMU Summer 2023 Contest Round 11(2022-2023 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2022 ...

  4. Vim 全局配置 / 设置鼠标模式

    新搞的 Linux (Debian) 上的 vim 一右击粘贴就变成 insert (Visual) 模式,上网查了一下,要 set mouse=,但是每次设置太麻烦了,另外我也想改一下全局配色. 定 ...

  5. Win32 创建窗口翻车记录

    今天创建窗口的时候,在捕获消息WM_CREATE的时候翻车了,找了好久都没找到,我换另一台电脑上又没出问题, 现分享下:LRESULT QWnd::WindowProc(HWND hWnd, UINT ...

  6. Html 使用scss爆红

      使用     <style  lang="less" scoped> </style>   即可      

  7. cesium中添加建筑白模

    1.在cesium中添加模型依赖于Cesium ion帐户的资产id,在这里创建账户. 2.上传模型(模型文件类型在Cesium ion中有说明,模型的提取办法可在这里查看)到账户中并平铺为3D Ti ...

  8. 手写一个Promise.all

    Promise.all 特性: 1. 按顺序返回结果数组; 2. 当所有promise完成才返回; 3. 返回第一个报错的promise的信息; 直接上代码: Promise._all = funct ...

  9. 痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下自定义安装与切换不同编译器版本的方法. Keil MDK 想必是嵌入式开发者最熟悉的工具之一了,自 2005 年 Ar ...

  10. CSS – Display block, inline, inline-block

    前言 之前 W3Schools 学习笔记就有提到了 CSS Layout - The display Property 这篇做更多的解释. 参考: CSS Display FLEX vs Block, ...