# String Processing# Comparison# Edge Cases

a221 - 11734 - Big Number of Teams will Solve This

🔗 前往 ZeroJudge 原題

題目描述

題目要求模擬 Judge 的判斷,比較隊伍的輸出與標準輸出。隊伍的輸出可能包含多餘的空格,而標準輸出則不包含空格。需要判斷隊伍的輸出是否與標準輸出完全匹配(包括空格),如果不匹配,則需要判斷在忽略空格後是否匹配。如果忽略空格後也不匹配,則判斷為 "Wrong Answer",如果長度不一致,則判斷為 "Output Format Error",如果完全匹配則判斷為 "Yes"。

解題思路

程式首先讀取測試案例的數量。對於每個測試案例,程式讀取隊伍的輸出和標準輸出。然後,程式檢查隊伍的輸出和標準輸出的長度是否相同。如果長度相同,則直接比較兩個字串是否相等。如果長度不同,則移除隊伍輸出中的空格,然後比較移除空格後的字串和標準輸出是否相等。如果相等,則輸出 "Output Format Error",否則輸出 "Wrong Answer"。

複雜度分析

  • 時間複雜度: O(n), 其中 n 是字串的長度。因為需要遍歷字串以移除空格和比較字串。
  • 空間複雜度: O(n), 其中 n 是字串的長度。因為需要建立一個新的字串來儲存移除空格後的隊伍輸出。

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	int a;
	string b,c;
	cin >> a;
	getline(cin,b);
	for(int h=1;h<=a;h++){
		getline(cin,b);
		getline(cin,c);
		cout << "Case " << h << ": ";
		if(b.length()!=c.length()){
			string d,e;
			for(int i=0;i<b.length();i++){
				if(b[i]!=' '){
					d+=b[i];
				}
			}
			for(int i=0;i<c.length();i++){
				if(c[i]!=' '){
					e+=c[i];
				}
			}
			if(d==e){
				cout << "Output Format Error\n";
			}
			else{
				cout << "Wrong Answer\n";
			}
		}
		else{
			if(b==c){
				cout << "Yes\n";
			}
			else{
				cout << "Wrong Answer\n";
			}
		}
	}
}

Discussion