# String# Output Formatting# Simulation

e698 - OREOREO!

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據輸入的 O 和 RE 的寬高以及成分,輸出指定數量的餅乾圖案。O 和 RE 的寬高可能不同,需要將較短的部分置中輸出。

解題思路

這題主要考驗字串輸出格式的控制。程式首先讀取 O 和 RE 的寬高以及成分,然後讀取餅乾的數量。對於每個餅乾,程式會根據輸入的字串(O 或 RE)來決定輸出哪種成分的餅乾。如果字串是 O,則輸出 O 的圖案;如果字串是 RE,則輸出 RE 的圖案。在輸出圖案時,需要考慮置中的情況,即如果 O 或 RE 的寬度較小,則需要在輸出前添加空格以實現置中。

複雜度分析

  • 時間複雜度: O(n * m * k),其中 n 是餅乾的數量,m 是字串的長度,k 是 O 或 RE 的寬高。
  • 空間複雜度: O(1),程式只使用了常數級別的額外空間。

程式碼

#include <iostream>
using namespace std;
struct oreo{
	int x,y,xx,yy,dis;
	char o,re;
};
oreo a;
int n;
string s;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	cout.tie(0);
	while(cin >> a.y >> a.x >> a.yy >> a.xx >> a.o >> a.re){
		a.dis=abs(a.y-a.yy);
		cin >> n;
		for(int ca=0;ca<n;++ca){
			cin >> s;
			for(int i=0;i<s.size();++i){
				if(s[i]=='O'){
					for(int i=0;i<a.x;++i){
						if(a.y<a.yy){
							for(int i=0;i<(a.dis+a.dis%2)/2;++i){
								cout << " ";
							}
						}
						for(int j=0;j<a.y;++j){
							cout << a.o;
						}
						cout << "\n";
					}
				}
				else{
					++i;
					for(int i=0;i<a.xx;++i){
						if(a.yy<a.y){
							for(int i=0;i<(a.dis+a.dis%2)/2;++i){
								cout << " ";
							}
						}
						for(int j=0;j<a.yy;++j){
							cout << a.re;
						}
						cout << "\n";
					}
				}
			}
			cout << "\n";
		} 
	} 
}

Discussion