santisify Site

Back

Atcoder beginner contest 376Blur image

A.Candy Button#

Candy Button

题目描述#

一个按钮,按了会发糖。

给定多次按的时间。如果这次按的时间距离上次发糖时间超过了cc,则发个糖。问发的糖数量。

解题思路#

发糖的前提是距离上次发糖时间大于等于cc

参考代码#

B.Hands on Ring (Easy)#

Hands on Ring (Easy)

题目描述#

nn的环形格子。两个棋子,初始位于00, 11。 给定 qq个指令,每个指令指定一个棋子移动到某个格子上,期间不能移动另外一个棋子。 依次执行这些指令,问移动的次数。

解题思路#

简单模拟一下即可,可能我的代码有点“屎山”.

参考代码#

C.Prepare Another Box#

Prepare Another Box

题目描述#

给定 nn个球的大小和n1n - 1个箱子的大小。现买一箱子,要求尺寸最小,使得 nn个球恰好可以放进 nn个箱子里,一个箱子有且只能放一个球。

解题思路#

要求找出箱子大小的最小值,那么我们可以先排个序,若最后一个箱子越大,可以放入的方法就越多,反之越少。那么我们怎么求找到这个值呢?我们只需要一个箱子我们可以去尝试每一个大小箱子,但是这不现实,于是就可以想到二分,可以大大减小时间复杂度,二分条件便是查看是否有球无法放入箱子。二分完成后,要检查二分后的答案是否满足题意。

参考代码#

D.Cycle#

Cycle

题目描述#

给定一张有向图,问包含点11的环的最小环点数。

解题思路#

要确保点数最小,且有回路,那么只有 BFSBFS,从点 1BFS1BFS,每次到达点11时更新答案。

参考代码#

E.Max × Sum#

Max × Sum

题目描述#

给定nn, kk和两数组 AA,BBSS是大小为 kk1,2,,N{1,2,…,N} 的子集,求 maxiSAiiSBi\max_{i \in S} A_{i} * \sum_{i \in S}B_{i} 的最小值。

解题思路#

枚举AiA_{i},剩下的问题就是找满足 AjAiA_{j} \le A_{i}的前k1k-1小的BjB_{j}的和。首先对数组 AA进行排序,并且数组BB与数组AA一同变化(可以用pair)。然后依次枚举 AiA_{i},此即为maxiSAi\max_{i \in S} A_{i}。然后找1ji1 \le j \le i中最小的k1k - 1BiB_{i}。考虑如何维护前 k1k-1小的和,因为会有不断的BiB_{i}加入,会不断淘汰较大的BiB_{i},因此可以用优先队列维护这些 BiB_{i}在优先队列不断 push,pop时维护其里面的值的和即可。其时间复杂度为O(nlogn)O(n \log n)注意枚举AiA_{i}时, BiB_{i}是一定要选的,因此要从优先队列里求出前k1k - 1小的和(但第kk小的不能丢弃,它可能比BiB_{i}小,只是因为此时 BiB_{i}必选,因而暂时不能选它)。

参考代码#

Atcoder beginner contest 376
https://santisify.top/blog/old/abc376
Author santisify
Published at October 24, 2024
Comment seems to stuck. Try to refresh?✨