普及组周赛27

A

首先能围住一定是在 x 轴和 y 轴上都有

由两点之间线段最短可知,围栏的长度就是这两点间的距离

所以找最短的 x 和 y 就可以啦。

code

B

就推导一下就可以啦










code

C

如果 k > 1 那么成倍增长一定比一个一个加快,所以模拟就可以了。

code

D

两两之间的最短路

我们有F-W 蒜法

for(int k = 1 ; k <= n ; k ++ ){
    for(int i = 1 ; i <= n ; i  ++){
        for(int j = 1 ; j <= n ; j ++ ){
            dis[i][j] = min(dis[i][k] + dis[k][j] , dis[i][j]);
        }
    }
}

其中最外层是中转点(一定要放在最外层) 但中转点的顺序不影响,所以把这个拆开来就行。

code