小屋創作

巴哈姆特 APP

專屬 ACG 勇者的廣闊世界

以 APP 瀏覽

日誌2020-09-13 00:00

ZeroJudge - d835: NOIP2003 1.乒乓球 解題心得

作者:Not In My Back Yard

題目連結:
d835: NOIP2003 1.乒乓球


題目大意:
輸入有多列,每列給定最多 20 個字元(當遇到字元「E」時,代表輸入結束,忽略其後多餘的字元)。每個字元代表一球的結果,字元只會是「W」或是「L」,前者代表華華的勝利、後者則代表對手的勝利。

比分的格式為「華華:對手」,例如 11:0 代表著華華在這局贏了 11 球、對手則是贏了 0 球。請在輸入完所有字元後,輸出 11 分制下每局的比分以及 21 分制下每局的比分。

例如:WWWWWWWWWWWWWWWWWWWWWWLW,代表著現在是 11 分制下的第三局比賽。第一局為 11:0 、第二局為 11:0 、目前的第三局比分則為 1:1;而如果在 21 分制下,現在是第二局,第一局是 21:0 、第二局則是 2:1。

輸出格式參見範例輸出。

注:比賽有著延長賽的機制。例如 11 分制,就是當兩人都拿 10 分而平手後,先拿下對手兩分的人則獲勝,否則繼續直到有人多贏對手兩分;21 分制的也是類似,但是以 20 分為界線。



範例輸入:
WWWWWWWWWWWWWWWWWWWW
WWLWE


範例輸出:
11:0
11:0
1:1

21:0
2:1


解題思維:
因為字元數並未給定,因此使用可以變動大小的資料型態才是適合的。例如 C++ 中的 vector,每個元素存一對數字 (L, R),代表著 L:R 的比分。

每遇到一個「W」,將目前 vector 最尾端(也就是最新的一局球局)的 (L, R) 數對,將 L 加 1 ;反之,遇到「L」時,則將 R 加 1 。

然後判斷現在這局 (L, R) 兩數是否有其中一者 ≧ X 且滿足 abs(L - R) ≧ 2 ,其中 X = 11 或是 21,端看目前要模擬的比分制。如果滿足,則代表要進行下一局的比賽,因此在 vector 後面新增一對 (0, 0) 的數對。

然後接著將 11 分制的每一局之比分,也就是將每一對 (L, R) 之 L 、 R 輸出為 L:R 之格式。而 21 分制也是比照辦理。



本人的程式碼(放在CodePile)

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

1

0

LINE 分享

相關創作

ZeroJudge - f312: 1.人力分配 解題心得

ZeroJudge - e630: 中文數字 解題心得

LeetCode - 412. Fizz Buzz 解題心得

留言

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】