Raju和Meena喜歡玩彈珠,他們有許多上面有號碼的彈珠。一開始時,Raju按照彈珠上面的號碼由小到大排成一列,然后Meena會要求Raju找出某個號碼的第一顆彈珠所在的位置。她會算1…2…3…,如果Raju答對了,他就得1分,否則Meena得1分。玩了多次之后誰的得分多誰就贏了。今天你有機會扮演Raju的角色。由於你們都是很聰明的小孩,你會用電腦來計算,而Meena則寫了一個程序來檢查你花多少時間來回答所有的問題。
【輸入】
輸入含有多組測試數據,每組測試數據的第一列有2個正整數N、Q,N代表彈珠的數目,Q代表對於此組測試數據Meena問的問題的數目。接下來的N列每列有一個整數,代表這N個彈珠上的號碼(未經排序)。在接下來的Q列每列有一個整數代表Meena所問的問題(球的號碼)。所有輸入的數字都不會大於10000,且沒有負的。
當N=0,Q=0時代表輸入結束。請參考樣例輸入。
【輸出】
對每組測試數據請先輸出一列,這是第幾組測試數據。對每組測試數據Meena所問的每個問題輸出一列,輸出格式如下其中之一:
•x found at y如果第一個號碼為x的彈珠在位置y被發現(位置從1開始算)
•x not found如果找不到號碼為x的彈珠
輸出格式請參考樣例輸出。
【樣列輸入】
4 1
2
3
5
1
5
5 2
1
3
3
3
1
2
3
0 0
【樣列輸出】
CASE# 1:
5 found at 4
CASE# 2:
2 not found
3 found at 3
【分析與說明】本題考察sort函數和lower_bound的用法,只要理解題中的含義,在利用這兩個函數,這題就容易解決了。而sort大家已經很熟悉了,所以這里重點介紹一下lower_bound的用法(作用是查找“大於或等於x的第一個位置”):函數lower_bound()在first和last中的前閉后開區間進行二分查找,返回大於或等於val的第一個元素位置。如果所有元素都小於val,則返回last的位置。
舉例如下:
一個數組number序列為:4,10,11,30,69,70,96,100.設要插入數字3,9,111.pos為要插入的位置的下標
則(注:number為數組名)
pos = lower_bound( number, number + 8, 3) - number,pos = 0.即number數組的下標為0的位置。
pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number數組的下標為1的位置(即10所在的位置)。
pos = lower_bound( number, number + 8, 111) - number, pos = 8,即number數組的下標為8的位置(但下標上限為7,所以返回最后一個元素的下一個元素)。