CCF認證2023年12月第3題 最大的矩形

2021-09-29 13:46:51 字數 1373 閱讀 2954

試題編號:201312-3

試題名稱:最大的矩形

時間限制:1.0s

記憶體限制:256.0mb

問題描述:

問題描述

在橫軸上放了n個相鄰的矩形,每個矩形的寬度是1,而第i(1 ≤ i ≤ n)個矩形的高度是hi。這n個矩形構成了乙個直方圖。例如,下圖中六個矩形的高度就分別是3, 1, 6, 5, 2, 3。

請找出能放在給定直方圖裡面積最大的矩形,它的邊要與座標軸平行。對於上面給出的例子,最大矩形如下圖所示的陰影部分,面積是10。

輸入格式

第一行包含乙個整數n,即矩形的數量(1 ≤ n ≤ 1000)。

第二行包含n 個整數h1, h2, … , hn,相鄰的數之間由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i個矩形的高度。

輸出格式

輸出一行,包含乙個整數,即給定直方圖內的最大矩形的面積。

樣例輸入

63 1 6 5 2 3

樣例輸出

10解題思路:

有點類似於字串匹配的思想,就是從當前的小矩形依次往後走,如果下乙個小矩形的高度小於當前的高度,則更新min的值,每走一次,計算一下當前可以形成的大矩形的面積,如果大於已知的最大面積,則更新maxs的值。

然後下一次迴圈,更換起始小矩形,再次重複上面的過程;

大體就是這樣

1 2 3 4 5 6 //計算六次面積

2 3 4 5 6 //計算5此面積

3 4 5 6 //計算4次面積

4 5 6 //計算3次面積

5 6 //計算2次面積

6 //計算1次面積

每次計算過後都與maxs比較,最後輸出maxs的值

#include

using

namespace std;

intmain()

int maxs=-1

;//儲存已知的最大面積

for(

int i=

1;i<=n;i++

)

area=

(j-i+1)

*min;

//每走一次,計算一次min高度可以形成矩形的面積

if(area>maxs)}}

cout<

}

CCF認證2023年12月第1題 出現次數最多的數

試題編號 201312 1 試題名稱 出現次數最多的數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個正整數,找出它們 現次數最多的數。如果這樣的數有多個,請輸出其中最小的乙個。輸入格式 輸入的第一行只有乙個正整數n 1 n 1000 表示數字的個數。輸入的第二行有n個...

2023年12月CCF試題解答

把識別碼以兩種形式儲存下來 第一種應對識別碼是 x 的情況 char flag isbn 12 第二種應對識別碼是字元 0 9 的情況 int flagn isbn 12 0 如果正確輸出 right if flagn judge number,9 flag x judge number,9 10 ...

CCF2023年12月第3題 Crontab

這一題要求我們對給定的配置資訊,在特定的時間段輸出需要執行的任務。在unix中每分鐘檢查一次,最簡單的思路就是用迴圈模擬時間的推移,每分鐘匹配一次規則。這種情況在真正的系統裡是很高效的,因為時間是真實流動的。但如果是模擬執行則有些浪費時間。如果在考試過程中想不到其它方法這種暴力方法至少可以通過70 ...