Try   HackMD

UVA 11233 - Deli Deli

題目:

Deli太太經營著熟食店"Deli Deli"。

就在去年,Deli太太決定擴大她的業務,建立在線商店,並且聘請了一位工程師負責線上商店。

最近,她的新的客戶一直抱怨電子帳單有錯誤。工程師忘記顧客購買多項商品時,商品需要使用複數形式。

不幸的是Deli太太聘請的工程師正在休假,因此你的任務是為Deli太太實現此功能。

以下為複數形式的輸出說明:

若單字的複數形態屬於沒有規則的類型,請從表格輸出對應的複數型(表格會事先給定)。
否則,若單字以子音字母接"y"結尾,請以"ies"取代"y"。
否則,若單字以"o", "s", "ch", "sh", "x"結尾,請在字尾多加上"es"。
否則,請直接在字尾加上"s"。
Input
輸入的第一行包含兩個整數L和N(0 ≤ L ≤ 20、1 ≤ N ≤ 100)

接下來L行包含對不規則單詞的描述及其複數形式。

每行包含兩個用空格字符分隔的單詞,其中第一個單詞為單數,第二個單詞為複數。
在不規則單詞列表之後,接下來N行,每行包含一個單詞。
每個單詞最多包含20個小寫字母[a-z]。

Output
對於每行單詞,輸出單詞的複數形式。

Sample Input #1
3 7
rice rice
spaghetti spaghetti
octopus octopi
rice
lobster
spaghetti
strawberry
octopus
peach
turkey

Sample Output #1
rice
lobsters
spaghetti
strawberries
octopi
peaches
turkeys

C++ code:

#include <bits/stdc++.h> #define spd ios::sync_with_stdio(0);cin.tie(0); #define ll long long int using namespace std; int main() { int a, b; cin >> a >> b; vector<string> m(a * 2), n(b); for (int i = 0; i < a * 2; ++i) { cin >> m[i]; } for (int i = 0; i < b; ++i) { cin >> n[i]; } for (int i = 0; i < b; ++i) { auto it = find(m.begin(), m.end(), n[i]); if (it != m.end()) { int index = distance(m.begin(), it); cout << m[index + 1] << endl; } else { string t = n[i]; int len = t.length(); if (t.back() == 'y' && (t[len - 2] != 'a' && t[len - 2] != 'e' && t[len - 2] != 'i' && t[len - 2] != 'o' && t[len - 2] != 'u')) { t.pop_back(); t += "ies"; } else if (t.back() == 'o' || t.back() == 's' || t.back() == 'x') { t += "es"; } else if (t.substr(len - 2) == "ch" || t.substr(len - 2) == "sh") { t += "es"; } else { t += "s"; } cout << t << endl; } } return 0; }