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; } };
相关文章推荐
- TopCoder SRM 649 Div2 Problem 500 - CartInSupermarketEasy (区间DP)
- TopCoder SRM 681 Div. 2 Problem 500 - ExplodingRobots (枚举)
- TopCoder SRM 647 Div2 Problem 500 - TravellingSalesmanEasy (思维)
- TopCoder SRM 663 Div2 Problem 500 - ABBA (思维)
- TopCoder SRM 655 Div2 Problem 500 - FoldingPaper2 (思维)
- TopCoder SRM 654 Div2 Problem 500 - OneEntrance (思维)
- TopCoder SRM 668 Div2 Problem 1000 - AnArray (数学)
- TOPCODER/SRM 566 DIVII(250、500、1000题)(1000PT暂未附上代码)
- topcoder srm 682 div1 -3
- topcoder SRM495 div1 level3
- Topcoder SRM 573 WolfPackDivTwo
- TopCoder SRM 633 Div.2 500 Jumping
- TopCoder SRM 644 Div2 Problem 500 - LostCharacter (贪心)
- [容斥] Topcoder SRM div1-3 12004. SetAndSet
- TopCoder SRM 649 Div2 Problem 1000 - XorSequenceEasy (思维)
- Topcoder SRM 668 DIV 2
- Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串
- Topcoder SRM 652 DIV1 250
- TopCoder Practice SRMs -- SRM 144 DIV 1 -- 300p
- TopCoder SRM144 DIV1(one)