您的位置:首页 > 运维架构

TopCoder SRM 659 Div2 Problem 500 - PublicTransit (思维)

2015-05-13 20:05 591 查看

题意

有两个虫洞,抵达一个可以瞬间到达另一个,现在问可以任意放置虫洞,求两点之间任意位置的最短路径。

思路

一开始用二分+优先队列TLE了。。

因为这题没有障碍物,所以可以不用搜索,直接计算。

枚举两个虫洞的位置,枚举起点和终点。

起点到终点有三种方式:

1. 直接到。

2. 起点→虫洞1→虫洞2→终点

3. 起点→虫洞2→虫洞1→终点。

只要把这三种方式的路径长度算出来取最小值即可。

代码

class PublicTransit {
int row, col;

int dis(int a, int b, int aa, int bb)
{
return abs(a-aa) + abs(b-bb);
}

public:
int minimumLongestDistance(int R, int C) {
row = R, col = C;
int ans = INF;
FOOR(i, 1, row) FOOR(j, 1, col) FOOR(ii, 1, row) FOOR(jj, 1, col)
{
int curAns = 0;
FOOR(k, 1, row) FOOR(l, 1, col) FOOR(kk, 1, row) FOOR(ll, 1, col)
{
int d1 = dis(k, l, kk, ll);
int d2 = dis(k, l, i, j) + dis(ii, jj, kk, ll);
int d3 = dis(k, l, ii, jj) + dis(i, j, kk, ll);
curAns = max(curAns, min(d1, min(d2, d3)));
}
ans = min(ans, curAns);
}
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm-icpc