題目 美幻佛舞 dance
烏龜密碼 tur
分組編隊 prime
征戰天龍國 dragon
新聞採訪 tur2 測試一
測試二 測試三 測試四 測試五 測試六 測試七 測試八 測試九 測試十
台北市九十九學年度高級中學資訊學科能力競賽 程式設計試題
(建國中學資訊科校內培訓第一次模擬競賽)
准考證號碼: ___________
姓名: ___________
USB 號碼: ___________
下表為評分用,請勿填寫
總分
/ 250
選手簽名 評審
題目 美幻佛舞 dance
烏龜密碼 tur
分組編隊 prime
征戰天龍國 dragon
新聞採訪 tur2
時間限制 1.0 sec 2.0 sec 2.0 sec 3.5 sec 2.5 sec 記憶體限制 32 MB 32 MB 32 MB 32 MB 32 MB
目錄 --- --- --- --- ---
可執行檔 dance.exe tur.exe prime.exe dragon.exe tur2.exe
輸入檔 --- tur.in prime.in dragon.in tur2.in
輸出檔 --- tur.out prime.out dragon.out tur2.out
總分 50 50 50 50 50
注意事項
一、此競賽採部分電腦線上自動評分,因此參賽選手應嚴格遵守每一題目所規定之目錄、
執行檔、輸入檔、輸出檔之路徑、名稱及格式。若未遵守,該題將可以 0 分計算。
二、針對每一題所完成之程式,每一題皆會個別限制其執行時間及使用記憶體上限。執 行超過時間或使用過量記憶體的測試資料視同未完成,該筆將以 0 分計算。
三、競賽結束後,參賽選手應在指定的時間內與評審共同進行程式測試與評審作業。
四、每一筆測試資料沒有部分給分,但每一題可以只答對部分的測試資料。
建中校內培訓模擬競賽特殊規則:
一、比賽途中
據,逾期不以計算。(注意:是上傳程式碼(.cpp)而非執行檔(.exe),請勿搞混。)
二、比賽途中對題目有任何問題可以至上述網址發問,上述網址亦有備份
程式碼的功能,請隨時記得備份。
三、結束後會統一評測,方式為讀檔寫檔,請依照上方表格以及各題題目名稱下方的輸 出、輸出檔名作輸入、輸出。
題目一:美幻佛舞(DANCE)
輸入方式:本題無須輸入輸出 輸出方式:本題無須輸入輸出 時間限制:單筆 1.0 secs
記憶體限制:32MB 函式庫:dance.h
<!—本題為互動題-->
題目敘述
隨著莊圓大師聲望不斷上升,他的佛舞也深深攝著大家的目光。
漸漸地大家茶餘飯後的話題不再是腥羶色的八卦新聞,而轉為猜測莊圓大師下一隻舞步 的名諱,誰能正確猜中誰就能得到其他人的欽佩。
你經由內線消息得知,下一隻舞步會是[A][B][C]的組合,且[A],[B],[C]一定是從下列 字庫中選取。這樣每一隻佛舞的名字都可以化成三個數字表示,例如『天帝剪刀舞』可 以表示成(1,2,5)。
[A] [B] [C]
01.天帝 02.佛舞 03.滑幻 04.佛陀 05.黃金 06.抄手
01.鐵鏟 02.剪刀 03.斧頭 04.千手 05.菜刀 06.劍 07.幻 08.長槍 09.長老 10.飛吻
01.頓幻舞 02.滑幻舞 03.夢幻舞 04.美男幻舞 05.舞 06.芭蕾舞
你三生有幸遇到了一位莊圓大師的大弟子,你每次可以詢問一組佛舞名稱,如果完全正 確他會告訴你你得到了莊圓的真傳,並且下一次錄影時帶你去現場旁聽;反之如果你有 一處以上(含)的地方有錯誤,他會隨機指出一項你錯誤的地方。
例如假設下一隻佛舞是(1,3,6)而你猜了(6,10,6),他可能會告訴你[A]錯了或是[B]
錯了。至於他實際會告訴你什麼要看它的心情。
但是假設你猜測的次數超過某個神秘數字或是你把一個錯誤的名字當成下一次佛舞的名 字,你會因為謗佛而生命瞬間消失!!
你急切地想得之下一次佛舞的名字,但卻又害怕生命瞬間消失,需要採取一個有效率的 策略來進行。請你寫一個程式來達成這個任務。
本題為互動題,不同於一般題目,不需要做任何輸入輸出的動作。但是需要先引入檔案:
#include<dance.h>,且必須使用這個函式庫來完成所有操作:
Init:
定義:void Init( void );
呼叫:Init();
說明:在進行任何操作前請先執行這個函式。
Query:
定義:int Query( int a, int b, int c );
呼叫:Query( a, b, c );
說明:詢問(a, b, c )是否為佛舞的名字。
大弟子會傳回給你一個整數值:
若是0表示你的猜測完全正確,
若是1表示[A]的猜測有誤,
若是2表示[B]的猜測有誤,
若是3表示[C]的猜測有誤。
Finish:
定義:void Finish( void );
呼叫:Finish();
說明:當你確定你上一次Query()的即是佛舞的名字,便呼叫這個函式,大弟子會幫你 結束程式,並且檢查你是否有謗佛你的程式是否達成任務。
提示
一個僅能過30%測資的程式:
#include<dance.h>
#include<cstdio>
int main(){
Init();
for(int i=1; i<7; i++) for(int j=1; j<11; j++)
for(int k=1; k<7; k++) if(Query(i,j,k) == 0)
Finish();
}
※純屬虛構,絕無謗佛※
題目二:烏龜密碼(TUR)
輸入方式:tur.in 輸出方式:tur.out 時間限制:單筆 2.0 secs
記憶體限制:32MB 題目敘述
你推開窗戶,望著窗外龜來龜往的街道──自從某天早上醒來起,你就發現自己身處在 烏龜王國了,並且你覺得自己格格不入──你是這裡少數腳的數量比別龜少的(甚至只 有他們的一半!),另一個跟你同病相憐的是隔壁的巴西烏龜小明。
小明在一場意外失去了雙腿,每次想起他你都會想起你當初看到他慘狀時你所說的話 (※),每每為此深感愧疚的你決定去探望他。
剛推開他家大門就看見小明的身影,他一看到你,很開心地滑了過來:「太好了,正有 事情要找你!」接著給你看了一個墨西哥來的石版,並且希望能破解他。
「好,那你要聽我的指揮合作知不知道?」
「知道!」
「當我說什麼你要確實做到知不知道?」
「知道!」
「……臣亮言先帝創業未半知不知道?」
「知道!」
你心想,他果然沒在聽!!!!!!!
於是,你的午餐得到了加菜。
於是,你決定自力更生去破解密碼。
這是一種烏龜一族古老的語言,總共有52個字符,為方便起見用大小寫英文字母共52個 符號(A-Za-z)代表它們。注意,大小寫視為相異。
在石版上的字是一個非常長的字串S,你知道它裡面一個連續段會是關鍵密鑰。石板後面 還附著一個字串W,密鑰一定是W裡面的字符經過重組形成的。例如W是abc,密鑰就有可 能是abc, acb, bac, bca, cab, cba,但不可能是ABC。
但是符合條件的序列可能有不只一組,你想知道有多少符合的上述條件的序列。
(※):我還有點餓……
輸入說明(tur.in)
第一行有兩個正整數,n, m (n <= m),n表示W的長度、m表示S的長度。
第二行有一個字串W,
第三行有一個字串S。
可以保證W、S內所有組成字元皆為大小寫英文字母。
且兩者任一皆不為空字串。
輸出說明(tur.out)
輸出只含一行,表示有多少可能是密鑰的子字串。
範例輸入 4 11 cAda
AbrAcadAbRa
範例輸出 2
提示
兩個可能的密鑰為,
[4,7]的Acad、
[5,8]的cadA。
n <= 3,000
對於 40%的測試資料,m <= 1,000 對於100%的測試資料,m <= 3,000,000
相關資料:#1Cgp-4QX (StupidClown) [ptt.cc] [童年] 亂回答(板標) 附贈一張小明照片:
題目三:分組編隊(PRIME)
輸入方式:prime.in 輸出方式:prime.out 時間限制:單筆 2.0 secs
記憶體限制:32MB 題目敘述
西元20XXX年,建國中學要舉辦快樂暑假營。講師們希望舉行一場ICPC分組競賽,所以希 望分成很多隊而且為了講究公平性,每隊人數都要一樣。
但是他們很sad的發現除了每個人各自一隊或是全部人成為一大隊之外別無他法,本來要 辦的團隊競賽也只好辦成個人賽。
因為人數實在太多了(可能多到跟32位元int一樣多,想想那電腦教室要多大!),
他們只知道總人數在閉區間[L, R]內,(包含L和R)
現在他們想問你,這個閉區間內有幾個數字可能造成如此窘境?
輸入說明(prime.in)
輸入第一行含一個正整數T,表示有幾組詢問。
每筆詢問第一行含兩個正整數L, R,表示詢問的區間範圍。
T <= 20 L <= R
輸出說明(prime.out)
對每組詢問輸出一行含一個整數N,即為[L, R]內會造成窘況的數字個數。
範例輸入 3
2 5 6 10 11 100
範例輸出 3
1 21
提示
對於 30%的測試資料,2 <= L <= R <= 1,000,000, (R-L) <= 100 對於 60%的測試資料,2 <= L <= R <= 1,000,000,000, (R-L) <= 100 對於100%的測試資料,2 <= L <= R <= 2,147,483,647, (R-L) <= 200,000
題目四:征戰天龍國(DRAGON)
輸入方式:dragon.in 輸出方式:dragon.out 時間限制:單筆 3.5 secs
記憶體限制:32MB 題目敘述
你擁有一支強大的陸戰隊。這支陸戰隊的所有士兵排成了一個矩形,如下:
...-+.-++.+...-.+....+-..
.--...+...++...+.
...++....+....-+..+..+...
..-..+...-...-.+.++.+..--..
...+.+-.+..-.+...+....-+.- ...+.+.++.-..++-+..+...- ...+....+..+...-+.-.-+...
...+-..+.+.++.+...+++...
如果一個士兵的戰力是1,則在軍隊中以「+」表示;如果戰力是-1(會拖累戰役),
則以「-」表示。至於戰力是0的則用「.」表示。一個軍隊中,可以選出任意一個 矩形區塊的子軍隊,而該子軍隊的戰力就是子軍隊中所有士兵的戰力和。
不幸的是,你將在不久之後與天龍國作戰。為了減低損耗,你決定派最少數量的士 兵出去作戰。藉著神秘消息的幫助,你得知派出去的子軍隊戰力最少要有K以上才 能戰勝。那你究竟要派幾個士兵出去作戰呢?
輸入說明(dragon.in)
第一行:三個整數H、W、K,代表全軍隊中共有H列、W行。
第二行到第H+1行:每行會有W個字元,字元只會是「+」、「-」或「.」。
輸出說明(dragon.out)
第一行:請輸出一個整數p,代表最少要派p個士兵出去。
如果無論如何都無法贏得戰役,請輸出-1。
範例輸入 5 5 3 -…- .+.+.
..+..
.+.+.
-…-
範例輸出 6
提示
佔總分30%的測試資料中,沒有戰力為負的士兵。
佔總分70%的測試資料中,1≦H, W≦300,0≦K≦90,000。
對於所有的測試資料而言,1≦H, W≦500,0≦K≦250,000。
題目五:新聞採訪(TUR2)
輸入方式:tur2.in 輸出方式:tur2.out 時間限制:單筆 2.5 secs
記憶體限制:32MB 題目敘述
「我與小明不相見已有二年餘了,我最不能忘記的是他的雙腿。(雖然他根本沒有)」
光陰荏苒,你如今是一位御用新聞記者,專門替國王烏龜的電視台採訪各式各樣的新聞。
還記得TIOJ 1623--國王烏龜的接駁車嗎?大意就是國王烏龜開放死老百姓烏龜們去覲 見國王,舉國上下無不歡聲雷動,一時之間各個直達皇宮接駁車的站牌前都排滿了烏龜,
好不盛大!
你自然被派遣過去負責採訪這場盛宴。並且他們看在你的才能,決定要讓你Live連線報 導,你知道如果把這個難得的機會搞砸了你可能會變成小明第二。
因此,在開始報導之前你決定先去向前輩烏龜瞭解你的報導方式。
「
你待會要進行的報導方式呢,你看那邊有一條大排長龍的隊伍,共有n隻烏龜排成一列,
你需要選擇一個區間[A,B](包含A, B)進行採訪,採訪的方式是依序遞麥克風給這個區 間每一隻烏龜,讓他們自由發言。
必須注意的是因為要弄得看起來很有公信力,你採訪的總人數不能小於L個人。
當然自由發言是有危險成份在的,有些反國王份子可能會講出危言聳聽的話,危害國王 聲譽,所以我們會依序把烏龜標號0或1,0表示危險份子、1則是很安全。
所以,我們希望你能讓這個區間內1佔的比例越大越好,如果有很多個一樣好的區間,那 就是總人數越少越好(但還是得>=L),如果還是有很多個,那就A越小越好。
你選好你要採訪的區間了嗎?告訴我吧。
」
輸入說明(tur2.in)
輸入第一行含一個正整數T,表示接下來有幾條隊伍要採訪(幾組詢問)
每組詢問第一行含兩個正整數n, L(L <= n),分別表示隊伍長度跟採訪總人數下限。
第二行會是一個長度為n的01序列,依序表現出每隻烏龜危不危險。
輸出說明(tur2.out)
對每組詢問輸出兩個正整數數字A和B,表示[A,B]是你的最佳選擇。
※這個序列編號由1開始,到n為止。
範例輸入 2 17 5
00101011011011010 20 4
11100111100111110000
範例輸出 7 11 6 9
提示
對於第一組範例,[7,11]為11011,1的比例為80%,且他較[10,14]小。
對於第二組範例,[6,9]為1111,1的比例為100%,且他較[12,16]短。
對於100%測資,T <= 400; 1 <= L <= 1,000且L <= n。
對於10%測資,所有烏龜都不危險 對於30%測資,1 <= n <= 2,000 對於60%測資,1 <= n <= 5,000 對於80%測資,1 <= n <= 20,000 對於100%測資,1 <= n <= 100,000