首页 > 其他分享 >123

123

时间:2024-01-29 17:58:13浏览次数:18  
标签:给定 枚举 123 端点 区间 长度 gets

A

给定 \(n\) 个区间 \([a_i, b_i]\)。若将所有有交集的区间合并,最后有多少区间。

按 \(a_i\) 排序。记录当前正在尝试合并的区间的左右端点 \(l, r\)。初始 \(l = a_1, r = b_1\)。

枚举 \(i = (2, 3, \dots, b)\)。此时:

  • 如果 \(r \ge a_i\):合并。实现上就是 \(l\) 不变,\(r \gets \max(r, b_i)\)。
  • 如果 \(r < a_i\):重开。实现上就是 \(l \gets a_i\),\(r \gets b_i\)。

B

给定 \(n\) 个区间 \([a_i, b_i]\)。

给定 \(m\) 个人,每个人有一个区间 \([c_i, d_i]\) 和 \(k_i\)。

如果 \([a_i, b_i]\) 被 \([c_j, d_j]\) 包含,那么第 \(j\) 个人就可以选择区间 \(i\)。

每个区间至多被一个人选择,每个人至多选 \(k_i\) 个区间。

求是否所有区间都能被某个人选中。

把区间和人放在一起,并全部以左端点排序。左端点相同时把人排在前面。

然后按顺序枚举 \(i = (1, 2, \dots, n + m)\)。如果第 \(i\) 个是区间,那么我们需要找到一个人 \(j\) 且满足:

  • \(a_j \le c_i\);
  • \(b_j \ge d_i\)。

由于我们是按 \(a, c\) 排序的,所以第一个条件即 \(j < i\)。问题也就变成了要在 \(i\) 之前找到一个人 \(j\),且人的右端点在区间的右端点的右面。

此时如果有多个满足条件的人,那么我们应该贪心地找右端点最小的,也就是找 \(b_j\) 最小的。

实现上维护 set。枚举到人时加入 \((d_i, k_i)\)。枚举到区间时找到最小的大于等于 \(b_i\) 的 \(d_j\),并将 \(k_j\) 减一。如果 \(k_j = 0\) 将其移除 set

C

给定长度为 \(n\) 的序列 \(a\)。

对于一个 \(x\),选择 \(a_i\) 的代价为 \(|a_i - x|\)。

给定代价之和的上限 \(B\)。求一个 \(x\),使得选择的 \(a_i\) 最多。

可以发现,如果将 \(a\) 从小到大排序,那么最终选择的 \(a_i\) 一定是连续的。

若确定了区间 \([l, r]\),那么代价之和为 \(f(l, r) = \sum_{i = l}^r |a_i - x|\)。很显然将 \(x\) 确定为这些数的中位数 \(f(l, r)\) 最小。

枚举左端点 \(l\)。此时需要找到最大的 \(r\) 满足 \(f(l, r) \le B\)。此时可以 \(\mathcal O(n \log n)\) 二分做。

同时可以发现随着 \(l\) 变大,\(r\) 一定不会变小。所以可以 \(\mathcal O(n)\) 双指针。

D

给定长度为 \(n\) 的序列 \(a\)。

至多 \(m\) 次操作,每次可以将一个大于 \(0\) 的 \(a_i\) 减一。

你需要进行若干次操作后,使得存在 \(a_k = 0\),且 \(\max(|a_i - a_{i + 1}|)\) 最小。

求这个最小值。

二分答案 \(x\)。然后求在不一定存在 \(a_k = 0\) 的条件,所有的 \(|a_i - a_{i + 1}|\) 都小于等于 \(x\) 的最小操作次数。

先从左往右调整 \(a_i \gets \min(a_i, a_{i - 1} + x)\)。然后还会有不满足的,于是再从右往左调整 \(a_i \gets \min(a_i, a_{i + 1} + x)\)。记录操作次数。

然后枚举 \(k = (1, 2, \dots, n)\) 表示将 \(a_k \gets 0\)。那么序列会变成这样:

\[a_1, \cdots, l \times x, \cdots, 2x, x, 0, x, 2x ,\cdots, r \times x, \cdots, a_n \]

也就是说在 \(a_k\) 出形成了一个辐射状的等差数列,这个等差数列往左延申到 \(k - l\),往右延申到 \(k + r\)。

可以发现随着 \(k\) 的递增,\(k - l\) 和 \(k + r\) 都不会变小。所以还是双指针。

E

给定 \(n\) 个区间 \([a_i, b_i]\)。

你需要选择 \(m\) 个区间,使得它们至少有一个公共点且区间长度的极差最小。

如果有若干个区间被选中,那么如果其中有 \(m\) 个区间有至少一个公共点,就代表如果将每个区间内的位置加 \(1\) 的话存在一个位置大于等于 \(m\)。

我们首先按照区间长度从小到大排序。然后枚举最小长度 \(l\),找到最大长度 \(r\),使得将 \(l \sim r\) 这些区间按照上述操作加一后存在一个位置大于等于 \(m\)。那么此时 \(r - l\) 即为答案。

找这个 \(r\) 可以二分做。同时观察到,随着 \(l\) 变大,\(r\) 一定不会变小。所以 \(\mathcal O(n)\) 双指针。

F

给定长度为 \(n\) 的仅含 \(\texttt {ab}\) 的字符串。

你可以改变至多 \(k\) 个字符,求改变后最大的连续相同字符的数量。

二分答案 \(x\)。要做的就是判断是否存在一个长度为 \(x\) 的区间,使得能够在进行不超过 \(k\) 次的情况下,将其变成相同的。于是统计区间内 \(\texttt{ab}\) 字符分别数显的次数,然后与 \(k\) 比大小即可。

也可以双指针。假设我们要全变成 \(\texttt{a}\),那么仍然是维护两个指针 \(l, r\),表示 \(l \sim r\) 中 \(\texttt b\) 的数量不超过 \(k\)。于是找到最大的 \(r\) 然后计算最大长度 \(r - l + 1\) 即可。

G

给定长度为 \(n\) 的序列 \(a\)。

定义 \(f(l, r)\) 表示区间 \([l, r]\) 内不同元素的数量。

随机选取 \(l, r\),求 \(f(l, r)\) 的期望。

一个区间内相同的元素只会对答案产生一次贡献。不妨将这次贡献放在最左面的元素上。

考虑这个问题:第 \(i\) 个元素上一次出现在 \(j\) 的位置,有多少个区间 \([l, r]\) 是 \(i\) 元素可以贡献的?

显然需要满足两个条件:

  • \(j < l \le i\);
  • \(i \le r \le n\)。

那么答案即 \((i - j) \times (n - i + 1)\)。

于是统计每个元素在它之前最后一次出现的位置。然后根据上述公式累加答案即可。

H

标签:给定,枚举,123,端点,区间,长度,gets
From: https://www.cnblogs.com/2huk/p/17995007

相关文章

  • 0123今日收获
    今日代码1今日代码2今日代码3今日代码4今日代码5今日代码6今日代码7今日代码8今日代码9!今日收获满满......
  • 0123所学内容
    0123所学内容复习内容hello中的常见问题变量和注释变量的定义:在内存空间中申请一块存储区域变量的注意事项1.必须声明2.必须初始化3.不能重复三种注释标识符的命名规范(Alibaba开发文档)标识符的运用练习1Nameimportjava.util.Scanner;publicclassName{pu......
  • CodeForces 1237H Balanced Reversals
    洛谷传送门CF传送门容易想到把\(s,t\)分成长度为\(2\)的段考虑。容易发现\(00,11\)的个数在操作过程中不会改变,所以若两串的\(00\)或\(11\)个数不相等则无解。考虑依次对\(i=2,4,\ldots,n\)构造\(s[1:i]=t[n-i+1:n]\)。对于\(s_{j-1}s_j=y......
  • 亚马逊美国站|ASTM F1235-18便携式儿童椅安全标准
    便携式儿童外出餐椅是一种无腿座椅,可将其固定在桌子侧方,所处的位置和高度恰好可以让坐在其中的儿童在桌面上用餐。其所固定桌子提供支撑力。便携式儿童外出餐椅适用于无测试报告将面临的处罚:如果您未在适用的截止日期之前提供所需信息,亚马逊可能会:·删除相关商品信息·暂停您添加新......
  • CF1239E 题解
    因为懒得用bitsetMLE了。所以各位想A这题的别偷懒用布尔数组!本题解意在解释如何做类似的dp题,而不在于解释本道题做法的具体推导,只是给出一个思路。我们观察发现,题目想让我们最小化一个最大值。我们并不能枚举每种方案去找最大值再取\(\min\),这样复杂度爆炸而且没有前途......
  • 多线程循环打印123
    1、多线程循环打印123importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;publicclassPrintThread{privateLocklock=newReentrantLock();privatevolatileintflag......
  • *035共情营邱月帮-第17次课(周六晚上-AB对练-)-20231230
      20221212--20221230期间每周一、四、五上正课,三、六是对答疑、对练课。 打开心灵,改变从自己开始,一起抱团取暖。《相信相信的力量》----------------------------------------------------------------------------------------------------------------(周六)-202312......
  • CF1234F 题解
    blog。小清新题,下文\(V=20\)即值域。反转操作,本质就是选两个不相交连续段拼起来。显然合法的最终串长度一定\(\leV\)。将这些合法串预处理出来,那么每个串都对应一个「字母集合」。随便DP一下,求出所有集合中,的最大的合法「字母集合」大小。\(dp_{\smallU}\)就是只选一......
  • py123——模拟体育竞技分析:乒乓球比赛
    模拟体育竞技分析:一.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬采用乒乓球比赛规则一局比赛:‪‬......
  • 3123
    #include<iostream>#include<windows.h>usingnamespacestd;/*声明变量*/HWNDhand=NULL;//游戏窗口DWORDpid=0;//游戏进程IDHANDLEhProcess=NULL;//进程对象DWORDBaseValue=0;//游戏数据存放的基础值DWORDSunshineAddress;DWORDZombiesAddress;boolstartGa......