EOJ 3256 拼音魔法

2021-08-01 01:26:36 字數 3692 閱讀 7247

time limit per test: 1.0 seconds

time limit all tests: 1.0 seconds

memory limit: 256 megabytes

魔法學校小學一年級有一種題。就是給乙個字的拼音,給乙個聲調,讓你正確地注音。但魔法老師給了巨量的題,你不用魔法根本不可能做完。所以現在要讓你發明一種魔法完成這個任務。

問題已經講完了,下面開始教授漢語。(會漢語或者自認為會漢語的可以自動跳過)

漢語中乙個字的拼音由聲母和韻母兩部分組成,在極少數情況下也會沒有聲母,但一定有韻母。

一般認為,聲母有 b, p, m, f, d, t, l, n, g, k, h, j, q, x, z, c, s, zh, ch, sh, r, y, w;韻母有:a, e, o, i, u, ü, ai, ei, ui, ao, ou, iu, ie, üe, er, an, en, in, un, ün, ang, eng, ing, ong。

不是所有的字母都能組合的,組合的時候有時會發生一些神奇的事情,例如 üe 變成了 ue。但是標調規則有如下口訣:

有 a 先找 a,沒 a 找 o e,i u 併排標在後,這樣標調不會錯。

只有下面列出的元素可能會被標調。請按照下表輸出(尤其注意 a 不要輸出成 ɑ 了):

輔助材料:由教育部公布的拼音方案。如果有描述不一致的地方,請以本題描述為準。

第一行乙個整數 t

(1≤t≤105

) 。

下面 t

行,每行乙個拼音:拼音聲調在各個拼音之後,用數字 [1-4] 進行表示。例如zhong1 guo2。沒有數字的說明是輕聲,不用標調。

按照國際慣例,輸入檔案全部由 ascii 編碼組成。üv來代替。但在輸出中,應仍然用ü來表示。

對於每一組資料,輸出case x: y。其中 x 是從 1 開始的測試資料編號,y 是乙個拼音標調後的答案。

注意:對於非 ascii 字元的輸出,請使用 utf-8 編碼。

input

5

zhong1

guo2

meque1

nv3

output

case 1: zhōng

case 2: guó

case 3: me

case 4: quē

case 5: nǚ

官方題解:

a. 魔法拼音

這題確實沒說清楚。比賽中也有很多人問這個怎麼樣,那個怎麼樣。但是很多問題問得不符合常理,比方說 iou 會不會出現。本題還提供了所謂了「拼音標準」,並不是沒有用的。作為程式設計競賽,不單單是演算法重要,解決實際問題的能力也很重要。比方說,編碼問題;比方說,合理性問題。

至於用 c/c++ 的輸出問題直接複製題中的字元後使用 printf / cout 都可以,如果編譯器報錯請自行調整編譯器的選項。

比賽的時候就做出兩道,一道是啤酒那個題,乙個就是這個了,其實當時覺得題目說得挺清晰的。

因為題目說了這句話:輔助材料:

由教育部公布的拼音方案

。如果有描述不一致的地方,請以本題描述為準。

所以不要多去想 üe 有時候會變成ue的情況。因為題目說了,以本題描述為準。而且漢語拼音就那麼多組合,當時就想,它出題

也不能瞎組合,給出的測試資料一定是漢語中有的,不可能給亂組合的字串,組合出那種根本就不存在的漢語拼音。

接下來要介紹題目可能讓人有產生誤解的地方:

編碼,其實這個都不重要,只要將題目給出的標號的音複製貼上到**就可以了。完完全全正常思考就可以。

2.初始我以為,aeiouü 先遇到誰標誰,後來發現這樣想是錯的,按這樣的想法,第4組資料就應該標音會再u上。

後來發現,真是的意思是如果字串中有a,就在a上標音調。標a優先

然後e 和 o 是相同級別的,而且漢語中不存在e和o的拼音組合。所以如果字串中有e,標e。

有o標o.

下面考慮i,字串有i,且下一位是u,標u,否則標i.

接下來字串中有u,標u.

接下來字串中有v,變成ü,然後標引。

在輸出字串的過程中如果遇到v,統一按ü輸出。

題目不難,但是我的**寫的特別長,中間步驟都是重複的,但也沒辦法,相同的步驟,輸出的東西不一樣。

#include #include #include #include using namespace std;

char str[100];

///輸出字串的函式

///輸出過程有v,按ü輸出。

void disp(int start,int eend)

printf("\n");

}int main()

else

if(str[len-1]=='2')

if(str[len-1]=='3')

if(str[len-1]=='4')

break;}}

else

}break;

}else if(strstr(str,"o")) ///有o標o輸出字串break

else

if(str[len-1]=='2')

if(str[len-1]=='3')

if(str[len-1]=='4')

break;}}

else

}break;

}else if(strstr(str,"e")) ///有e標e,輸出字串,break;

else

if(str[len-1]=='2')

if(str[len-1]=='3')

if(str[len-1]=='4')

break;}}

else

}break;

}else if(strstr(str,"i")) ///有i

else

if(str[len-1]=='2')

if(str[len-1]=='3')

if(str[len-1]=='4')

break;}}

else

}break;

}else ///否則標i,輸出字串,break

else

if(str[len-1]=='2')

if(str[len-1]=='3')

if(str[len-1]=='4')

break;}}

else

}break;}}

else if(strstr(str,"u")) ///前面那些都沒有,有u標u,輸出字串,break

else

if(str[len-1]=='2')

if(str[len-1]=='3')

if(str[len-1]=='4')

break;}}

else

}break;

}else if(strstr(str,"v")) ///有v標ü,輸出字串,break

else

if(str[len-1]=='2')

if(str[len-1]=='3')

if(str[len-1]=='4')

break;}}

else

}break;}}

}return 0;

}

EOJ 莫干山奇遇

出題人當然是希望出的題目有關oxx,於是想方設法給題目配上一些有關oxx的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得oxx顯得非常可憐。所以出題人刪除了故事,只留下乙個枯燥乏味的數學問題。故事已刪除 給乙個長度為n的序列a1,a2,an,求乙個長度為m的序列b1,b2,...

325project詳細介紹

325project 2013 10 15 在老婆的提醒下才想起來還有這個軟體沒有放上,整整晚了6年啊。一直想發表些什麼程式,可不知道我會寫些什麼,學了那麼多年的程式,好像什麼都沒有寫過。其實也不是什麼也都沒寫過啦,那麼多年一直都在程式。所以想把以前為一家公司做的乙個貨代的流程系統發布出來,取名為3...

AT325量產詳細過程

上個學期期末的時候因為沒有自己刷過機,被許多大牛深深鄙視了一番 第一次系統崩潰還是請超哥給我刷的大白菜,罪過罪過 我這才了解到聯想的系統就是給一般的電腦小白定製的,重新做了一遍系統過後我發現除了一鍵還原這個功能以外,其他的電腦效率方面,大白菜 包括基本開發工具和其他基本軟體都安裝起來之後 都要優於聯...