ABC478 题解

A

题意
有 \(N\) 个人,\(M\) 个葡萄。按 \(1,2,\dots,N\) 的顺序循环分发,每人每次 1 个,直到分完。求每人最终得到多少个葡萄。

思路
先计算完整轮数:full = M / N,再计算剩余葡萄数:rem = M % N。
前 rem 个人会多得到 1 个葡萄。
因此第 \(i\) 个人的葡萄数为 full + (i <= rem ? 1 : 0)。


B

题意
有 \(N\) 种配料,第 \(i\) 种价格为 \(i\),幸福度为 \(W_i\)。选择恰好 3 种不同配料,总价格不超过 \(V\),求最大总幸福度。保证至少存在一种方案。

思路
\(N \le 100\),直接三重循环枚举所有三元组 \((i,j,k)\),满足 \(i<j<k\) 且 \(i+j+k \le V\),计算幸福度之和并取最大值。


C

题意
给定长度为 \(N\) 的序列 \(A\)。可以恰好选择一个长度为 \(K\) 的连续子数组,将其升序排序一次。问能否使整个序列非降序。

思路

  1. 将 \(A\) 复制为 \(B\) 并升序排序。
  2. 若 \(A\) 已与 \(B\) 相同,输出 Yes。
  3. 否则找出 \(A\) 与 \(B\) 不同的最左位置 \(L\) 和最右位置 \(R\)。
  4. 必须满足 \(R-L+1 \le K\),否则不可能一次排序覆盖所有不同点。
  5. 还需存在一个长度为 \(K\) 的区间 \([i, i+K-1]\) 完全覆盖 \([L, R]\),即

    \[\max(1, R-K+1) \le i \le \min(L, N-K+1) \]

    若该范围非空,输出 Yes,否则 No。

D

题意
有 \(N\) 个集合初始为空。进行 \(Q\) 次操作,每次给出 \(L,R,X\),向第 \(L\) 到第 \(R\) 个集合中加入元素 \(X\)。求所有操作结束后每个集合的元素个数。

思路
不同 \(X\) 之间互不影响。对每个 \(X\),收集它出现的所有区间 \([L,R]\)。
将这些区间按左端点排序并合并重叠区间。
对合并后的每个区间,用差分数组在 \(L\) 处 \(+1\),在 \(R+1\) 处 \(-1\)。
最后对所有 \(X\) 的差分数组求和,前缀和即为每个集合的元素个数。


E

题意
有 \(N\) 个变量 \(A_1,\dots,A_N\),每个取值在 \([1,N]\)。
给出 \(Q\) 个条件:

  • \(t=0\):\(A_u \le A_v\)
  • \(t=1\):\(A_u < A_v\)
    判断是否存在满足所有条件的整数序列,若存在输出任意一组。

思路
将条件转化为有向边:

  • \(A_u \le A_v\) 对应边 \(u \to v\),权值 \(0\)。
  • \(A_u < A_v\) 对应边 \(u \to v\),权值 \(1\)(即 \(A_v \ge A_u + 1\))。

用 Tarjan 求强连通分量。

  • 若存在 \(t=1\) 的边且两端在同一 SCC 内,则矛盾,输出 No。
  • 否则缩点得到 DAG。

在 DAG 上求最长路:初始所有 SCC 的值为 1,用优先队列按最长路更新,得到每个 SCC 的最小合法值。
每个变量输出其所属 SCC 的值即可。

posted @ 2026-10-04 20:29  Colubrid_L  阅读(8)  评论(0)    收藏  举报
v