AtCoder AGC030 B題解報告

2021-09-08 21:54:58 字數 1518 閱讀 3256

如上圖所示,0是takahashi的住處。1,2,3,4,5是五棵樹的位置。對於每棵樹,都有逆時針和順時針兩個方向。

(1)逆時針到達第1棵樹所能經過的最大距離為0(逆時針)-> 2(順時針)-> 1,順時針到達第1棵樹所能經過的最大距離為0(順時針)-> 1。

(2)逆時針到達第2棵樹所能經過的最大距離為0(逆時針)-> 1(順時針) -> 3(逆時針) -> 2,順時針到達第2棵樹所能經過的最大距離為0(順時針) -> 3(逆時針) -> 1(順時針)-> 2。

(3)逆時針到達第3棵樹所能經過的最大距離為0(逆時針)-> 1(順時針) -> 5(逆時針)-> 2(順時針)-> 4(逆時針)-> 3,順時針到達第3棵樹所能經過的最大距離為0(順時針) -> 5(逆時針) -> 1(順時針)-> 4(逆時針) -> 2(順時針) -> 3(逆時針)。

(4)逆時針到達第4棵樹所能經過的最大距離為0(逆時針)-> 3(順時針) -> 5(逆時針) -> 4,順時針到達第4棵樹所能經過的最大距離為0(順時針) -> 5(逆時針) -> 3(順時針)-> 4。

(5)逆時針到達第5棵樹所能經過的最大距離為0(逆時針)-> 5,順時針到達第5棵樹所能經過的最大距離為0(逆時針)-> 4(順時針) -> 5。

上面計算出n * 2 = 5 * 2 = 10個距離,找出最大值即為所求。

在計算距離之前,要計算:①逆時針經過每一棵樹並返回到原點的累積距離,存到l陣列中;②順時針到達每一棵樹並返回原點的累積距離,存到r陣列中。

然後計算總距離時,哪一棵樹沒有經過,就要把相應的距離減掉。

以逆時針經過第2棵樹為例,經過的距離為x[2] + l[1]+ r[3] – 從0點到第4棵樹的往返距離 – 從0點到第5棵樹的往返距離。

具體可看下面的**。

#include typedef long long ll;

using namespace std;

int l, n, x[200000];

ll r[200001], l[200001], max;

int main()

for (int i = 0; i < n; ++i)

for (int i = n - 1; i >= 0; --i)

for (int i = 0; i < n; ++i)

else

max = max(max, cnt);

// 順時針,與逆時針情景類似

cnt = l - x[i] + l[i] + r[i + 1];

if (i <= n - (i + 1))

else

max = max(max, cnt);

} cout << max << endl;

return 0;

}

topcoder & codeforces & atcoder交流qq群:648202993

演算法題 A除以B

題目描述 本題要求計算a b,其中a是不超過1000位的正整數,b是1位正整數。你需要輸出商數q和餘數r,使得a b q r成立。輸入描述 輸入在1行中依次給出a和b,中間以1空格分隔。輸出描述 在1行中依次輸出q和r,中間以1空格分隔。輸入例子 123456789050987654321 7 輸出...

演算法題 A除以B

題目描寫敘述 本題要求計算a b。當中a是不超過1000位的正整數,b是1位正整數。你須要輸出商數q和餘數r,使得a b q r成立。輸入描寫敘述 輸入在1行中依次給出a和b,中間以1空格分隔。輸出描寫敘述 在1行中依次輸出q和r,中間以1空格分隔。輸入樣例 12345678905098765432...

演算法題目第3題(B樹,B 樹,B 樹,B 樹)

一道筆試題 記不清楚了 b 樹插入操作的平均時間複雜度為o logn 最壞時間複雜度為o n hash表插入操作的平均時間複雜度為o 1 最壞時間複雜度為o n 排序鍊錶插入操作的平均時間複雜度為o n 最壞時間複雜度為o n 紅黑樹插入操作的平均時間複雜度為o logn 最壞時間複雜度為o n 這...