牛客網 程式設計題2

2021-10-03 20:54:06 字數 1168 閱讀 1861

給定乙個陣列序列, 需要求選出乙個區間, 使得該區間是所有區間中經過如下計算的值最大的乙個:

區間中的最小數 * 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列  [6 2 1]則根據上述公式, 可得到所有可以選定各個區間的計算值:

[6] = 6 * 6 = 36;

[2] = 2 * 2 = 4;

[1] = 1 * 1 = 1;

[6,2] = 2 * 8 = 16;

[2,1] = 1 * 3 = 3;

[6, 2, 1] = 1 * 9 = 9;

從上述計算可見選定區間 [6] ,計算值為 36, 則程式輸出為 36。

區間內的所有數字都在[0, 100]的範圍內;

輸入描述:

第一行輸入陣列序列長度n,第二行輸入陣列序列。

對於 50%的資料, 1 <= n <= 10000;

對於 100%的資料, 1 <= n <= 500000;

輸出描述:

輸出陣列經過計算後的最大值。
輸入例子1:

3

6 2 1

輸出例子1:

36
比較暴力的方法,固定i,先i的左邊遍歷,查詢比它大的數,遇到比它小的退出,向右同理。

因為容易證明將大的數加到區間中,最小的數沒有變,都是i,所以區間越大則最後的結果就越大

#include#include#include#include#includeusing namespace std;

int main()

// to right

j = i + 1;

while (j< n && array[j]>= array[i])

if (result < sum * array[i])

result = sum * array[i];

} cout << result << endl;

return 0;

}

牛客網程式設計題

參考了排行榜大神 1.計算字串最後乙個單詞的長度,單詞以空格隔開 a raw input b a.split print len b 1 2.寫出乙個程式,接受乙個有字母和數字以及空格組成的字串,和乙個字元,然後輸出輸入字串中含有該字元的個數。不區分大小寫 a raw input lower b r...

牛客網程式設計2

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1 是該壓棧序列對應的乙個彈出序列,但 4,3,5,1,2 就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的...

牛客網程式設計題1

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。思路 本題最初想簡單的求模算出等於1的位數,但是發現負數不行。其實簡單的做法應該是與 1相與,如果為 1,則原來為 1,迴圈移位判斷。但注意,要左移,要是右移,對於負數會一直在高位補 1,導致結果不準確。class solution ...