同題:UVa 11734 – Big Number of Teams will Solve This
為一個簡單的程式題目撰寫一個程式碼並不是太大的問題,但是缺乏經驗的新人並不太知道,自己的輸出需要完全與 Judges的相同。
通常的時候,他們會輸出多餘的空格,因為他們認為這樣會讓輸出變的更好看。
但是真實的狀況是:你輸出的每一個字元都應該跟 Judges 的一模一樣。
如果在提交 Judges 的時候多輸出空格,你將會得到「輸出格式錯誤」(Output Format Error)。
如果在 Judges 忽略空格後,輸出仍不正確,則會得到「錯誤答案」(Wrong Answer)。
而「正確」(Yes) 則會在輸出完全匹配的時候獲得。
在這一題,你需要判定提交者的輸出 ,並且給出 Judges 的判定。
範例測資
範例輸入 | 範例輸出 |
---|---|
在第一行會給出一個正整數 T (T < 20) 代表 共有幾組資料 每組資料會有兩行 第一行為 隊伍的輸出 第二行是 Judges 的輸出 每行至少會有一個字,最多 20 個字 隊伍的的輸出由空白跟字組成,Judges 的輸出則只有字 | 對於每組資料 你需要輸出一行 每一行包含了裁決編號 跟 裁決結果 請看範例測試 |
3 yes yes Casematters casematters no space please nospaceplease | Case 1: Yes Case 2: Wrong Answer Case 3: Output Format Error |
解題思路
使用 Getline 來收字串,收完 T 之後記得要先 cin.ignore()。收完資料之後如果兩個字串想同的話就可以直接輸出「Yes」,如果不相同的話才要做下面的判斷。
使用 Map 來紀錄每個「非空白」字元的出現次數,跑「隊伍輸出」的時候將 Map[字元]++,跑「Judges 輸出」的時候將 Map[字元]–。
跑 for (auto it:Map),並且預設一個 WA 的布林值為 False,如果跑迴圈的時候有任何一個 it.second != 0,則代表有多餘或是有少字元,將 WA 設為 True 之後 Break 迴圈。
如果 WA == True,則輸出「Wrong Answer」,若迴圈結束後還是 False,則代表只是多輸出空格輸出「Output Format Error」。
範例程式碼-ZeroJudge A221: Big Number of Teams Will Solve This
#include <iostream>
#include <map>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
cin.ignore();
for (int i = 0; i<N; i++)
{
string a, b;
getline(cin, a);
getline(cin, b);
cout << "Case " << i+1 << ": ";
if (a == b) cout << "Yes\n";
else
{
map<char, int>MAP;
for (int j = 0; j<a.length(); j++)
{
if (a[j] != ' ') MAP[a[j]]++;
}
for (int j = 0; j<b.length(); j++)
{
if (b[j] != ' ') MAP[b[j]]--;
}
bool WA = false;
for (auto it:MAP)
{
if (it.second != 0)
{
WA = true;
break;
}
}
if (WA) cout << "Wrong Answer\n";
else cout << "Output Format Error\n";
}
}
}
//ZeroJudge A221
//Dr. SeanXD