ABC151
打着玩的。
A.Next Alphabet
Time:\(0:38\)
Dif:\(\color{Gray}{13}\)
Skip.
B.Achieve the Goal
Time:\(3:12\)
Dif:\(\color{Gray}{40}\)
Skip.
C.Welcome to AtCoder
Time:\(6:35\)
Dif:\(\color{Gray}{333}\)
Skip.
D.Maze Master
Time:\(16:07\)
Dif:\(\color{Green}{959}\)
Description
给一个迷宫,求一组起点和终点使得他们之间的路径长度最大。输出长度。
\(1\leq H,W\leq20\)
Solution
暴力枚举起点然后做BFS即可。
E.Max-Min Sums
Time:\(28:25\)
Dif:\(\color{Turquoise}{1344}\)
Description
给一个数列 \(a\),在其中任选一个 \(k\) 个数的子序列 \(S\),定义 \(f(S)=\max_{i\in S} a_i-\min_{i\in S} a_i\),求 \(\sum f(S)\bmod 10^9+7\)。
\(1\leq n\leq10^5\)
Solution
给 \(a\) 数组排序,则从大到小第 \(i\) 个数成为子序列中最大值的次数为 \(\dbinom{n-i-1}{k-1}\),同理从小到大第 \(i\) 个数成为最小值的次数为 \(\dbinom{n-i-1}{k-1}\),乘一乘减一减就好了。
Code
F.Enclose All
Time:\(36:41\)
Dif:\(\color{Blue}{1671}\)
Description
平面内有 \(n\) 个点 \((x_i,y_i)\),求一个半径最小的圆覆盖所有点。输出半径。
\(2\leq n\leq50,-1000\leq x_i,y_i\leq1000\)
Solution1
模拟退火。没了。
Code
Solution2
考虑到这个圆弧不可能只覆盖一个点,不然肯定能更优。
所以分类讨论。
- 圆周上只有两个点。为了半径最小,圆心就是两个点连线的中点。判断一下其他点是否成立。
- 圆周上有三个点及以上。枚举三个点,那这个圆就已知了。判断其他点是否在圆内即可。
时间复杂度 \(O(n^4)\)。