日期:2025年9月30日
ZeroJudge 題目連結:e698. OREOREO!
解題想法
我先計算 O 的部分較寬及 RE 的部分較寬兩種狀況下,分別要印出的 O 及 RE 的字串。接下來讀取 n 塊餅乾的組成方式,依序輸出每一塊餅乾對應的形狀。
Python 程式碼
使用時間約為 28 ms,記憶體約為 3.8 MB,通過測試。
import sys
for line in sys.stdin:
w1, h1 = map(int, line.split())
w2, h2 = map(int, sys.stdin.readline().split())
c1, c2 = sys.stdin.readline().split()
if w1 > w2: # O 的部分較寬
O = c1*w1
RE = " "*((w1-w2)//2) + c2*w2
else: # RE 的部分較寬
O = " "*((w2-w1)//2) + c1*w1
RE = c2*w2
n = int(sys.stdin.readline()) # 接下來有 n 塊餅乾
for _ in range(n): # 執行 n 次
cookie = sys.stdin.readline().strip() # 餅乾的組成
i = 0 # 從 cookie 讀取資料用的索引值
while i < len(cookie): # 如果 i 還沒有出界時繼續執行
if cookie[i] == "O": # 如果是 O
for _ in range(h1): print(O) # 印出 h1 行的 O
i += 1 # i 加 1
elif cookie[i] == "R": # 如果是 RE
for _ in range(h2): print(RE) # 印出 h2 行的 RE
i += 2 # i 加 2
print() # 跑完一塊餅乾要換行
C++ 程式碼
使用時間約為 4 ms,記憶體約為 328 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int w1, h1, w2, h2;
char c1, c2;
while(cin >> w1 >> h1) {
cin >> w2 >> h2;
cin >> c1 >> c2;
string O = "", RE = "";
if (w1 > w2) { // O 的部分較寬
for(int i=0; i<w1; i++) O += c1;
for(int i=0; i<(w1-w2)/2; i++) RE += ' ';
for(int i=0; i<w2; i++) RE += c2;
} else { // RE 的部分較寬
for(int i=0; i<(w2-w1)/2; i++) O += ' ';
for(int i=0; i<w1; i++) O += c1;
for(int i=0; i<w2; i++) RE += c2;
}
int n; cin >> n; // 接下來有 n 塊餅乾
for(int i=0; i<n; i++) { // 執行 n 次
string cookie; cin >> cookie; // 餅乾的組成
int j = 0; // 從 cookie 讀取資料用的索引值
while(j < (int)cookie.size()) { // 如果 j 還沒有出界時繼續執行
if (cookie[j] == 'O') { // 如果是 O
for(int k=0; k<h1; k++) cout << O << "\n"; // 印出 h1 行的 O
j++; // j 加 1
} else if (cookie[j] == 'R') { // 如果是 RE
for(int k=0; k<h2; k++) cout << RE << "\n"; // 印出 h2 行的 RE
j+=2; // j 加 2
}
}
cout << "\n"; // 跑完一塊餅乾要換行
}
}
return 0;
}
沒有留言:
張貼留言