百貨公司停車場會依車子的大小設有三種類型的停車格:小型、中型以及大型停車格。
其中小型停車格適合大小在 1 到 199 間的車子,中型停車格適合大小在 200 到 499 間的車子,大於等於 500 則適合停放在大型停車格中。
每間停車場都會針對不同類型車子分配不同數量的停車格。為了更有效利用場地,當一類型的停車格已滿,車子可以停放到比他大的停車格中。
舉例來說:如果小型停車格停滿,小型車可以停到中型停車格的位置,但若大型停車格停滿,無法停到中型或小型停車格。
請你幫忙計算當前停車場最多可以停放的車子數量。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入第一列有三個整數S、M、和 L (1 ≤ S ≤ 100,1 ≤ M ≤ 100,1 ≤ L ≤ 100) 代表小型、中型和大型停車格數量。 第二列有一個正整數 N (1 ≤ N ≤ 300) 表示要停車的車子數量。第三列有 N 個正整數 Xi (1 ≤ X ≤ 1000,1 ≤ i ≤ N) 表示每台車子的大小。輸入中相鄰的兩個數值以空格間隔。 | 輸出一數字表示最多可以停放的車子數量。 |
2 1 1 4 20 30 40 50 | 4 |
4 1 2 7 800 400 100 250 600 300 650 | 4 |
3 4 0 8 210 190 170 150 130 110 900 70 | 7 |
解題思路
宣告一個陣列,並將 S、M、L 收到這個陣列的第 0 個到第 2 個位置。
宣告一個 Start 的變數,如果車子為小型車則設為 0、中型車設為 1、大型車設為 2。
跑一個 For迴圈 從 Start 到 3,如果 陣列[i] > 0,則將 陣列[i]– 並將答案 +1,記得要將 For迴圈 Break 掉。最後輸出答案的變數。
範例程式碼-ZeroJudge K513: 停車場 (Parking)
#include <iostream>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int arr[3] = {}, N, ans = 0;
cin >> arr[0] >> arr[1] >> arr[2] >> N;
for (int i = 0; i<N; i++)
{
int tmp, start;
cin >> tmp;
if (tmp <= 199) start = 0;
else if (tmp <= 499) start = 1;
else start = 2;
for (int j = start; j<3; j++)
{
if (arr[j] > 0)
{
arr[j]--;
ans++;
break;
}
}
}
cout << ans << "\n";
}
//ZeroJudge K513
//Dr. SeanXD