日期:2025年3月29日
ZeroJudge 題目連結:g798. 帶動商機 (Business)
解題想法
這題按照題目敘述操作陣列即可,不需要用複雜的寫法。
Python 程式碼
使用時間約為 30 ms,記憶體約為 3.3 MB,通過測試。
import sys
for line in sys.stdin:
arr = list(map(int, line.split()))[:-1] # 讀取一開始的人數,刪掉最後的 0
m = len(arr) # 店家數量
n = int(input()) # 更新 n 天
for _ in range(n): # 執行 n 次
tmp = arr.copy() # 暫存更新後的人數
for i in range(m): # 依序掃過 0 ~ m-1 家店
if i == 0: # 最左邊的店家
if arr[i] > arr[i+1]: # 如果人數大於右邊的店家
tmp[i+1] += arr[i]//10 # 右邊的店家人數增加量
elif i == m-1: # 最右邊的店家
if arr[i] > arr[i-1]: # 如果人數大於左邊的店家
tmp[i-1] += arr[i]//10 # 左邊的店家人數增加量
else: # 中間的店家
if arr[i] > arr[i-1]: # 如果人數大於左邊的店家
tmp[i-1] += arr[i]//20 # 左邊的店家人數增加量
if arr[i] > arr[i+1]: # 如果人數大於右邊的店家
tmp[i+1] += arr[i]//20 # 右邊的店家人數增加量
arr, tmp = tmp, arr # 交換 arr、tmp
print(*arr) # 印出答案
C++ 程式碼
使用時間約為 3 ms,記憶體約為 348 kB,通過測試。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int a; // 暫存人數用的變數
while(cin >> a) {
vector<int> arr; // 一開始的人數
while(a != 0) { // 讀取人數直到讀到 0 為止
arr.push_back(a);
cin >> a;
}
int m = (int)arr.size(); // 店家數量
int n; cin >> n; // 更新 n 天
for(int i=0; i<n; i++) { // 執行 n 次
vector<int> tmp (arr.begin(), arr.end()); // 暫存更新後的人數
for(int j=0; j<m; j++) { // 依序掃過 0 ~ m-1 家店
if (j == 0) { // 最左邊的店家
if (arr[j] > arr[j+1]) tmp[j+1] += arr[j]/10; // 如果人數大於右邊的店家,右邊的店家人數增加
} else if (j == m-1) { // 最右邊的店家
if (arr[j] > arr[j-1]) tmp[j-1] += arr[j]/10; // 如果人數大於左邊的店家,左邊的店家人數增加
} else { // 中間的店家
if (arr[j] > arr[j-1]) tmp[j-1] += arr[j]/20; // 如果人數大於左邊的店家,左邊的店家人數增加
if (arr[j] > arr[j+1]) tmp[j+1] += arr[j]/20; // 如果人數大於右邊的店家,右邊的店家人數增加
}
}
swap(arr, tmp); // 交換 arr、tmp
}
for(int i=0; i<m; i++) cout << arr[i] << " \n"[i == m-1]; // 印出答案
}
return 0;
}
沒有留言:
張貼留言