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)$