acm 學校海選題目
試題1:【旋轉矩陣】
【問題描述】數學上有一種矩陣叫旋轉矩陣,非常的有意思,所謂旋轉矩陣,就是在N階矩陣中,起始數1置於方陣的左上角,然後從起始數開始依次遞增,按順時針方向從外向裡旋轉填數而成。
【輸入】輸入檔名“matrix.in”
輸入檔案由一行或多行構成,每行由一個正整數N組成,(N不大於100)。輸入檔案的最後一行是‘#’表示檔案結束。。
【輸出】輸出檔名“estdout.pc2”
對於每一組資料,輸出一個N階的旋轉矩陣。兩組輸出之間不要額外的空行。矩陣中同一行的數字用一個空格分開。
程式執行後結果示例:
【樣例輸入】
5
#
【樣例輸出】
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
試題2:【單詞問題】
【問題描述】
給出一個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。一個單詞是指一串連續的最長的英文字母(大寫或小寫)。例如"#abc#"中,"abc"就是一個單詞,而"ab","bc"都不算單詞。
【輸入】輸入檔名“word.in”
輸入一個句子,只包含可見字元(不包含空格)。句子長度不超過 100。
【輸出】輸出檔名“estdout.pc2”
按單詞出現的順序輸出不同的單詞。如果一個單詞出現多次則只有第一次出現時輸出。
程式執行後結果示例:
【樣例輸入】
Wa_Study_Wa_Everyday_Wa_Daxia
【樣例輸出】
Wa
Study
Everyday
Daxia
試題3:【羅馬數字】
【問題描述】
古羅馬帝國開創了輝煌的人類文明,但他們的數字表示法的確有些繁瑣,尤其在表示大數的時候,現在看起來簡直不能忍受,所以在現代很少使用了。之所以這樣,不是因為發明表示法的人的智力的問題,而是因為一個宗教的原因,當時的宗教禁止在數字中出現0的概念!
羅馬數字的表示主要依賴以下幾個基本符號:
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
這裡,我們只介紹一下1000以內的數字的表示法。
單個符號重複多少次,就表示多少倍。最多重複3次。比如:CCC表示300 XX表示20,但這個規則僅適用於I X C M,150並不用LLL表示。
如果相鄰級別的大單位在左,小單位在右,表示大單位加上小單位,如XI表示11;如果相鄰級別的大單位在右,小單位在左,表示大單位中扣除小單位。比如:IX表示9,IV表示4 ,XL表示40,更多的示例參見下表,你找到規律了嗎?
I,1 II,2III,3IV,4V,5VI,6VII,7VIII,8IX,9 X,10XI,11XII,12XIII,13XIV,14XV,15XVI,16XVII,17XVIII,18XIX,19XX,20XXI,21XXII,22XXIX,29XXX,30XXXIV,34XXXV,35XXXIX,39XL,40L,50LI,51LV,55LX,60LXV,65LXXX,80XC,90XCIII,93XCV,95XCVIII,98XCIX,99C,100CC,200CCC,300CD,400D,500DC,600DCC,700DCCC,800CM,900CMXCIX,999
【輸入】輸入檔名“RomanNumber.in”
第一行是整數n,表示接下來有n個羅馬數字(n<100)。以後每行一個羅馬數字。羅馬數字大小不超過999。
【輸出】輸出檔名“estdout.pc2”
要求程式輸出n行,就是羅馬數字對應的十進位制資料。
程式執行後結果示例:
【樣例輸入】
3
LXXX
XCIII
DCCII
【樣例輸出】
80
93
702
試題4:【最大區域】
二值影象是由黑白兩種畫素組成的矩形點陣,影象識別的一個操作是求出影象中最大黑區域的面積。請設計一個程式完成二值影象的這個操作。黑區域由黑畫素組成,一個黑區域中的每個畫素至少與該區域中的另一個畫素相鄰,規定一個畫素僅與其上、下、左、右的畫素相鄰。兩個不同的黑區域沒有相鄰的畫素。一個黑區域的面積是其所包含的畫素的個數。
【輸入】輸入檔名“area.in”
輸入由多個測試例組成。每個測試例的第一行含兩個整數n和m, (1 <=n,m<=100), 分別表示二值影象的行數與列數,後面緊跟著n行,每行含m個整數0或1,其中第i行表示影象的第i行的m個畫素,0表示白畫素,1表示黑畫素。同一行的相鄰兩個整數之間用一個空格隔開,兩個測試例之間用一個空行隔開,最後一個測試例之後隔一個空行,再接的一行含有兩個整數0,標誌輸入的結束。
【輸出】輸出檔名“estdout.pc2”
每個測試例對應一行輸出,含一個整數,表示相應的影象中最大黑區域的面積。
程式執行後結果示例:
【樣例輸入】
5 6
0 1 1 0 0 1
1 1 0 1 0 1
0 1 0 0 1 0
0 0 0 1 1 1
1 0 1 1 1 0
4 6
0 1 1 0 0 1
1 1 1 1 0 1
0 1 0 1 1 0
0 0 0 1 1 1
0 0
【樣例輸出】
7
12
試題5:【選拔志願者】
重慶理工大學要選拔一批志願者參加一項重要的活動。
參加志願者選拔的同學們排隊接受面試官們的面試。參加面試的同學們按照先來先面試並且先結束的原則接受面試官們的考查。
面試中每個人的人品是主要考查物件之一。(提高人品的方法有扶老奶奶過街,不闖紅燈等)
作為主面試官的John想知道當前正在接受面試的同學隊伍中人品值最高的是多少。於是他請你幫忙編寫一個程式來計算。
【輸入】輸入檔名“selection.in”
輸入資料第一行為一整數T,表示有T組輸入資料。
每組資料第一行為”START”,表示面試開始
接下來的資料中有三種情況:
輸入 |
含義 |
CNAME RP_VALUE |
名字為NAME的人品值為RP_VALUE的同學加入面試隊伍。(名字長度不大於5,0 <= RP_VALUE <= 1,000,000,000) |
G |
排在面試隊伍最前面的同學面試結束離開考場。 |
Q |
主面試官John想知道當前正在接受面試的隊伍中人品最高的值是多少。 |
最後一行為”END”,表示所有的面試結束,面試的同學們可以依次離開了。
所有參加面試的同學總人數不超過1,000,000
【輸出】輸出檔名“estdout.pc2”
對於每個詢問Q,輸出當前正在接受面試的隊伍中人品最高的值,如果當前沒有人正在接受面試則輸出-1。
程式執行後結果示例:
【樣例輸入】
2
START
C Tiny 1000000000
C Lina 0
Q
G
Q
END
START
Q
C ccQ 200
C cxw 100
Q
G
Q
C wzc 500
Q
END
【樣例輸出】
1000000000
0
-1
200
100
500
試題6:【數字遊戲】
丁丁最近沉迷於一個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數(一共n個),你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到一個數k。遊戲的要求是使你所得的k最大或者最小。例如,對於下面這圈數字(n=4,m=2):當要求最小值時,((2-1) mod 10)×((4+3) mod 10)=1×7=7,要求最大值時,為((2+4+3) mod 10)×(-1 mod 10)=9×9=81。特別值得注意的是,無論是負數還是正數,對10取模的結果均為非負值。
丁丁請你編寫程式幫他贏得這個遊戲。
【輸入】輸入檔名“game.in”
輸入檔案第一行有兩個整數,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有個整數,其絕對值不大於104,按順序給出圈中的數字,首尾相接。
【輸出】輸出檔名“estdout.pc2”
輸出檔案有兩行,各包含一個非負整數。第一行是你程式得到的最小值,第二行是最大值。
【樣例輸入】
4 2
4
3
-1
2
【樣例輸出】
7
81
試題7:【Is It A Tree? 】
A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more nodes connected by directed edges between nodes satisfying the following properties.
1. There is exactly one node, called the root, to which no directed edges point.
2. Every node except the root has exactly one edge pointing to it.
3. There is a unique sequence of directed edges from the root to each node.
For example, consider the illustrations below, in which nodes are represented by circles and edges are represented by lines with arrowheads. The first two of these are trees, but the last is not.
In this problem you will be given several descriptions of collections of nodes connected by directed edges. For each of these you are to determine if the collection satisfies the definition of a tree or not.
Input
The input will consist of a sequence of descriptions (test cases) followed by a pair of negative integers. Each test case will consist of a sequence of edge descriptions followed by a pair of zeroes Each edge description will consist of a pair of integers; the first integer identifies the node from which the edge begins, and the second integer identifies the node to which the edge is directed. Node numbers will always be greater than zero.
Output
For each test case display the line "Case k is a tree." or the line "Case k is not a tree.", where k corresponds to the test case number (they are sequentially numbered starting with 1).
【Sample Input】Input filename:“trees.in”
6 8 5 3 5 2 6 4
5 6 0 0
8 1 7 3 6 2 8 9 7 5
7 4 7 8 7 6 0 0
3 8 6 8 6 4
5 3 5 6 5 2 0 0
-1 -1
【Sample Output】Output filename:“estdout.pc2”
Case 1 is a tree.
Case 2 is a tree.
Case 3 is not a tree.
試題8:【Coconuts, Revisited】
The short story titled Coconuts, by Ben Ames Williams, appeared in the Saturday Evening Post on October 9, 1926. The story tells about five men and a monkey who were shipwrecked on an island. They spent the first night gathering coconuts. During the night, one man woke up and decided to take his share of the coconuts. He divided them into five piles. One coconut was left over so he gave it to the monkey, then hid his share and went back to sheep.
Soon a second man woke up and did the same thing. After dividing the coconuts into five piles, one coconut was left over which he gave to the monkey. He then hid his share and went back to bed. The third, fourth, and fifth man followed exactly the same procedure. The next morning, after they all woke up, they divided the remaining coconuts into five equal shares. This time no coconuts were left over.
An obvious question is "how many coconuts did they originally gather?" There are an infinite number of answers, but the lowest of these is 3,121. But that's not our problem here.
Suppose we turn the problem around. If we know the number of coconuts that were gathered, what is the maximum number of persons (and one monkey) that could have been shipwrecked if the same procedure could occur?
Input
The input will consist of a sequence of integers, each representing the number of coconuts gathered by a group of persons (and a monkey) that were shipwrecked. The sequence will be followed by a negative number.
Output
For each number of coconuts, determine the largest number of persons who could have participated in the procedure described above. Display the results similar to the manner shown below, in the Expected Output. There may be no solution for some of the input cases; if so, state that observation.
【Sample Input】Input filename:“Coconuts.in”
25
30
3121
-1
【Sample Output】Output filename:“estdout.pc2”
25 coconuts, 3 persons and 1 monkey
30 coconuts, no solution
3121 coconuts, 5 persons and 1 monkey