2023牛客寒假算法基础集训营 5
部分题解: A B C D H K L
A
思路 : 快排 + 前缀和 + 二分查找
先从小到大排序, 再求出排完序后的前缀和. 对于每次询问, 二分查找第一个大于 \(x\) 的数的下标 \(cnt\), 那么区间的右边界 \(r = cnt - 1\) , 再和 \(k\) 比较判断, 得到区间的左边界 \(l = max(0, cnt - k)\) , 那么 \(ans = sum[r] - sum[l - 1]\)
B
思路:
每人都选最优的拿取方法使字典序最小, 那么就是每人每次只拿一个.
因为 \(小沙\) 是先手, 所以要么 \(小沙\) 比 \(小雅\) 多一个, \(小雅\) 赢; 要么一样多, 是平局.
C
思路:
要判断每一种 \(p\) 序列情况下 \(a\), \(b\) 的大小值, 需要分情况讨论: (改变前为\(A, B\), 改变后为 \(a, b\))
-
\(A = B\), 无论 \(p\) 序列如何排列, 都会有 \(a = b\)
-
\(A \neq B\)
-
\(A\) 的位数 = \(B\) 的位数, 这种情况下, \(a\) 和 \(b\) 不会有恒定的 \(>\) 和\(<\)
-
\(A\) 的位数 \(>\) \(B\) 的位数
输入可能会有前导零, 但即使没有前导零, \(p\) 序列也会使 \(A\) 和 \(B\) 出现前导零. 所以要把 \(A\) 和 \(B\) 相同的前几位去掉, 再进行判断
-
\(A\) 的位数 \(<\) \(B\) 的位数
与上一点同理
-
D
思路: 优先队列, 每次合并区间更新各自所在关卡值, 并判断输出
H
思路: 模拟判断
K
思路:
最优情况是每次取 \(x = \left \lfloor \frac{n}{2} \right \rfloor + 1\) , 循环遍历
L
思路:
从 \(n\) 开始往 \(1\) 遍历, 每次都枚举 \(m\) 条指令, 对于每条指令下达后剩余的人数下, 在剩余相同的人数下取花费的最小值
标签:2023,牛客,寒假,nowcoder,集训营,com From: https://www.cnblogs.com/oneway10101/p/17084045.html