AtCoder Regular Contest 126题解(A-C)

似乎是第一次认真打ARC,其实仍然在摆烂

比赛链接


A - Make 10

题意:给长度为2,3,4的木棒分别$a$,$b$,$c$根,求能拼成至多几根长度恰为10的木棒,$T$组数据

数据范围:$1≤T≤100,0≤a,b,c​≤10^{15}$

题解:发现无论如何长为10的木棒都包含一个长度为6的,所以考虑先使用长度为3的

按以下顺序:①3+3+4 ②3+3+2+2 ③4+4+2 ④2+2+2+2+2是最优的,直接计算即可

时间:$O(1)$ 空间:$O(1)$


B - Cross-free Matching

题意:给2排每排$n$个点和$m$条线段,第$i$条线段连接第一排第$a_i$个点和第二排第$b_i$个点

求最多能选取几条线段,使得选取的线段两两不相交(端点重合也算相交)

数据范围:$1≤n,m≤2×10^5,1≤a_i​,b_i​≤n.$没有相同线段。

题解:按照$b_i$从小到大为第一关键字,$a_i$从大到小为第二关键字对线段排序

遍历第二排每个点$x$,对于每一条线段$(a_i,x)$,树状数组维护第一排连接点不超过$a_i$的最大线段选取数

因为一个端点只能连接一条线段,所以$a_i$要从大到小排序

时间:$O(n\log n)$ 空间:$O(n)$


C - Maximize GCD

题意:给$n$个数的序列$a_i$和$k$,可以对序列进行至多$k$次单个数加1的操作,求操作后最大的序列$\gcd$

数据范围:$2≤n≤3×10^5,1≤k≤10^{18},1≤a_i​≤3×10^5$

题解:注意到$k$很大但是$a_i$并不大,于是发现如果$k$足以将序列所有数补成最大值,则答案为$\max\{a_i\}+\dfrac{(k-(n*\max\{a_i\}-\sum{a_i}))}{n}$

否则就是$k$为$n*\max\{a_i\}$级别的情况了

枚举所有可能的$\gcd$,对于每个$\gcd$用桶统计需要加1的次数,如果小等于$k$就可行,输出最大的可行$\gcd$

时间:$O(n\log n)$ 空间:$O(n)$

posted @ 2021-09-19 22:58  huangxuanao  阅读(143)  评论(0编辑  收藏  举报