哈爾濱理工大學2016新生賽B題

2022-03-03 19:38:14 字數 1050 閱讀 6663

第一行為乙個正整數t,表示測試資料組數。

每組測試資料第一行為乙個整數n(1 <= n <= 100000),第二行包含n-1個正整數,其中第i個數表示編號為i的基地與編號為i+1的基地之間的長城長度。此長度不會超過2147483647.

對每組測試資料輸出一行,僅含乙個整數,表示按照最優方案建造完蟲洞後,祝踏嵐需要從基地1趕到的移動距離最遠的基地的移動距離。

#include #include #include #include using namespace std;

const int maxn = 1100000;

int i, j, r, n, m, ansi, ansj, ansr;

long long ans;

long long p[maxn];

inline void make()

i++;

}}int main()

make();

printf("%lld\n", ans);

}return 0;

}

對於任意點k,其與點1之間的最短路有兩種情況:

(1)   直接從點1走到k;

(2)   從1走到點a,通過a直接跳到點b,再從b走到k。

或者說,這條最短路等於min(直接從1走到k的距離,從1走到點a通過a跳到b在從b走到k的距離)。

設點i和j之間的直線距離為dis[i,j],則:

在第(1)種情況下,最短路長度為dis[1,k];

在第(2)種情況下,最短路長度為dis[1,a] + dis[b,k];

由於dis[1,a]是乙個常數(因為a固定),而與k有關的只有b,應直接選擇a=1使dis[1,1] = 0.(也就是說傳送門的第乙個點一定要建在1點上)。

對當前列舉的第二個傳送點位置b,必有唯一乙個點c具有如下性質:

dis[1,c] <= dis[c,k] 且 dis[1,c+1] > dis[c,k]

此時距離1最長的點為c,c+1或n中的乙個。

留意到隨著b的遞增,c是不遞減的,所以在o(n)列舉b的同時只需要o(1)就可以找到c。

哈爾濱理工大學2016新生賽K題

小明這個人特別無聊,他喜歡把乙個字串以乙個奇怪的姿勢壓縮起來。他會把連續的字元表示成字元和數字的形式,而且他用的數字還都是一位的!比如下面這個例子 a12 表示的是 aaaa 也就是說壓縮後的字串裡的每個數字表示重複最後乙個出現的字元數字次,就好像上面的例子。現在給你一些被無聊的小明壓縮過的字串,你...

哈爾濱理工大學2016新生賽I題

這次我們要寫乙個簡單的行編輯器,當按下 時代表按下了一次退格符,當按下 時代表乙個退行符 使當前行的字元全部無效 例如,假設從終端接收了這樣的兩行字元 whil lr e s s outcha putchar s 則實際有效的是下列兩行 while s putchar s 請你編寫乙個程式,輸出實際...

哈爾濱理工大學2016新生賽G題

fbi tree的描述如下 我們可以把由0和1組成的字串分為3類,全0的串成為b串,全1的串成為i串,既含0又含1的串則稱為f串。fbi樹是一種二叉樹,它的節點型別也包括f串節點 b串節點和i串節點三種。由乙個 長度為2 n的01串s可以構造出一顆fbi樹t,遞迴的構造方法如下 1 t的根節點為r,...