PTA-算法設計與分析-AC原題
7-1 最大子列和問題 (20分)
給定K個整數組成的序列{ N1, N2, ..., NK },「連續子列」被定義爲{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K。「最大子列和」則被定義爲全部連續子列元素的和中最大者。例如給定序列{ -2, 11, -4, 13, -5, -2 },其連續子列{ 11, -4, 13 }有最大的和20。現要求你編寫程序,計算給定整數序列的最大子列和。
本題旨在測試各類不一樣的算法在各類數據狀況下的表現。各組測試數據特色以下:
數據1:與樣例等價,測試基本正確性;
數據2:102個隨機整數;
數據3:103個隨機整數;
數據4:104個隨機整數;
數據5:105個隨機整數;
輸入格式:
輸入第1行給出正整數K (≤100000);第2行給出K個整數,其間以空格分隔。
輸出格式:
在一行中輸出最大子列和。若是序列中全部整數皆爲負數,則輸出0。
輸入樣例:算法
6
-2 11 -4 13 -5 -2
輸出樣例:編程
20數組
做者: DS課程組
單位: 浙江大學
時間限制: 50000 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情安全
7-2 求素數個數 (30分)
求素數的個數。本題要求編寫一個程序,求1~n的素數個數。 要求至少給出兩種解法,對於相同的n,給出這兩種解法的結果,經過相關數據進行測試,目的是經過對比同一問題不一樣解法的絕對執行時間體會如何設計「好」的算法。
輸入格式:
輸入在一行中給出1個整數n(<= 10 000 000)。
輸出格式:
對每一組輸入,在一行中輸出1~n的素數個數。
輸入樣例1:ide
5
輸出樣例1:函數
3
輸入樣例2:測試
14
輸出樣例2:this
6設計
做者: 李廷元
單位: 中國民用航空飛行學院
時間限制: 200 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-3 統計字符 (20分)
統計一個給定字符串中指定的字符出現的次數。
輸入格式:
測試輸入包含若干測試用例,每一個測試用例包含2行,第1行爲一個長度不超過5的字符串,第2行爲一個長度不超過80的字符串。注意這裏的字符串包含空格,即空格也多是要求被統計的字符之一。當讀到'#'時輸入結束,相應的結果不要輸出。
輸出格式:
對每一個測試用例,統計第1行中字符串的每一個字符在第2行字符串中出現的次數,按以下格式輸出: c n0
c1 n1
c2 n2
...
其中ci是第1行中第i個字符,ni是ci出現的次數。
輸入樣例:排序
I
THIS IS A TEST
i ng
this is a long test string
#
輸出樣例:
I 2
i 3
5
n 2
g 2
樣例解釋:
第2個測試用例中,空格也是被統計的字符之一。
做者: 李廷元
單位: 中國民用航空飛行學院
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-4 禮尚往來 (20分)
吉哥仍是那個吉哥,那個江湖人稱「嘰嘰哥」的基哥。每當節日來臨,女朋友衆多的嘰嘰哥老是能從全國各地的女朋友那裏收到各類禮物。有禮物收到固然值得高興,但回禮確是件麻煩的事!不管多麻煩,總很差意思收禮而不回禮,那也不是嘰嘰哥的風格。如今,即愛面子又摳門的嘰嘰哥想出了一個絕妙的好辦法:他準備將各個女朋友送來的禮物合理分配,再回送不一樣女朋友,這樣就不用再花錢買禮物了!假設嘰嘰哥的n個女朋友每人送他一個禮物(每一個人送的禮物都不相同),如今他須要合理安排,再回送每一個女朋友一份禮物,重點是,回送的禮物不能是這個女朋友以前送他的那個禮物,否則,嘰嘰哥可就攤上事了,攤上大事了......如今,嘰嘰哥想知道總共有多少種知足條件的回送禮物方案呢?
輸入格式:
輸入數據第一行是個正整數T,表示總共有T組測試數據(T <= 100); 每組數據包含一個正整數n,表示嘰嘰哥的女朋友個數爲n( 1 <= n <= 100 )。
輸出格式:
請輸出可能的方案數,由於方案數可能比較大,請將結果對1000000007 取模後再輸出。(提示:在遞推過程當中,不斷求餘防止數據太大致使數據溢出。) 每組輸出佔一行。
輸入樣例:
3
1
2
4
輸出樣例:
0
1
9
做者: hcx11333
單位: 山東大學(威海)
時間限制: 1000 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-5 找單詞 (20分)
假設有x1個字母A, x2個字母B,..... x26個字母Z,同時假設字母A的價值爲1,字母B的價值爲2,..... 字母Z的價值爲26。那麼,對於給定的字母,能夠找到多少價值<=50的單詞呢?單詞的價值就是組成一個單詞的全部字母的價值之和,好比,單詞ACM的價值是1+3+14=18,單詞HDU的價值是8+4+21=33。(組成的單詞與排列順序無關,好比ACM與CMA認爲是同一個單詞)。
輸入格式:
輸入首先是一個整數N,表明測試實例的個數。 而後包括N行數據,每行包括26個<=20的整數x1,x2,.....x26.
輸出格式:
對於每一個測試實例,請輸出能找到的總價值<=50的單詞數,每一個實例的輸出佔一行。
輸入樣例:
2
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 2 6 2 10 2 2 5 6 1 0 2 7 0 2 2 7 5 10 6 10 2 10 6 1 9
輸出樣例:
在這裏給出相應的輸出。例如:
7
379297
做者: hcx11333
單位: 山東大學(威海)
時間限制: 1000 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-6 求最大元素值 (30分)
n個元素的數組的最大元素能夠用遞歸計算出來。 定義方法:int max(int x, int y) 它返回x和y兩個整數中的較大值。 試用遞歸編寫方法:int arraymax(int[] a, int n) 它使用遞歸返回數組a的最大元素值。 終止條件:n==2 遞歸步驟:arraymax=max(max(a[0],...,a[n-2]), a[n-1])
輸入格式:
第一行的第一個元素是輸入元素個數n (1<n<=30),第二個元素以後是輸入n個元素;
輸出格式:
按格式要求輸出相鄰兩個元素的最大值,例如輸出的第一項是a[0]和a[1]之間的最大值;第二項爲以前的最大值與a[2]之間的最大值,依次類推,直到最後輸出n個元素數組的最大元素值。
輸入樣例:
5 1 3 2 5 3
輸出樣例:
max(1,3)=3 max(3,2)=3 max(3,5)=5 max(5,3)=5 5
做者: 林華
單位: 廣東外語外貿大學
000題目詳情
7-7 求最大公約數 (30分)
使用展轉相除法和遞歸求兩個正整數m和n的最大公約數。
輸入格式:
輸入兩個正整數m,n。
輸出格式:
按要求輸出展轉相除過程及最終結果,輸出結果之間空格分隔。
輸入樣例:
21 35
輸出樣例:
gcd(21,35) gcd(35,21) gcd(21,14) gcd(14,7) 7
做者: 林華
單位: 廣東外語外貿大學
000題目詳情
7-8 找第k小的數 (20分)
設計一個平均時間爲O(n)的算法,在n(1<=n<=1000)個無序的整數中找出第k小的數。
提示:函數int partition(int a[],int left,int right)的功能是根據a[left]~a[right]中的某個元素x(如a[left])對a[left]~a[right]進行劃分,劃分後的x所在位置的左段全小於等於x,右段全大於等於x,同時利用x所在的位置還能夠計算出x是這批數據按升非降序排列的第幾個數。所以能夠編制int find(int a[],int left,int right,int k)函數,經過調用partition函數得到劃分點,判斷劃分點是否第k小,若不是,遞歸調用find函數繼續在左段或右段查找。
輸入格式:
輸入有兩行:
第一行是n和k,0<k<=n<=10000
第二行是n個整數
輸出格式:
輸出第k小的數
輸入樣例:
在這裏給出一組輸入。例如:
10 4
2 8 9 0 1 3 6 7 8 2
輸出樣例:
在這裏給出相應的輸出。例如:
2
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-9 求逆序對數目 (20分)
注意:本問題算法的時間複雜度要求爲O(nlogn), 不然得分無效
題目來源:http://poj.org/problem?id=1804 Background Raymond Babbitt drives his brother Charlie mad. Recently Raymond counted 246 toothpicks spilled all over the floor in an instant just by glancing at them. And he can even count Poker cards. Charlie would love to be able to do cool things like that, too. He wants to beat his brother in a similar task.
Problem Here's what Charlie thinks of. Imagine you get a sequence of N numbers. The goal is to move the numbers around so that at the end the sequence is ordered. The only operation allowed is to swap two adjacent numbers. Let us try an example: Start with: 2 8 0 3 swap (2 8) 8 2 0 3 swap (2 0) 8 0 2 3 swap (2 3) 8 0 3 2 swap (8 0) 0 8 3 2 swap (8 3) 0 3 8 2 swap (8 2) 0 3 2 8 swap (3 2) 0 2 3 8 swap (3 8) 0 2 8 3 swap (8 3) 0 2 3 8
So the sequence (2 8 0 3) can be sorted with nine swaps of adjacent numbers. However, it is even possible to sort it with three such swaps: Start with: 2 8 0 3 swap (8 0) 2 0 8 3 swap (2 0) 0 2 8 3 swap (8 3) 0 2 3 8
The question is: What is the minimum number of swaps of adjacent numbers to sort a given sequence?Since Charlie does not have Raymond's mental capabilities, he decides to cheat. Here is where you come into play. He asks you to write a computer program for him that answers the question in O(nlogn). Rest assured he will pay a very good prize for it.
輸入格式:
The first line contains the length N (1 <= N <= 1000) of the sequence; The second line contains the N elements of the sequence (each element is an integer in [-1000000, 1000000]). All numbers in this line are separated by single blanks.
輸出格式:
Print a single line containing the minimal number of swaps of adjacent numbers that are necessary to sort the given sequence.
輸入樣例:
在這裏給出一組輸入。例如:
6
-42 23 6 28 -100 65537
輸出樣例:
在這裏給出相應的輸出。例如:
5
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-10 裝箱問題 (20分)
假設有N項物品,大小分別爲s一、s二、…、si、…、sN,其中si爲知足1≤si≤100的整數。要把這些物品裝入到容量爲100的一批箱子(序號1-N)中。裝箱方法是:對每項物品, 順序掃描箱子,把該物品放入足以可以容下它的第一個箱子中。請寫一個程序模擬這種裝箱過程,並輸出每一個物品所在的箱子序號,以及放置所有物品所需的箱子數目。
輸入格式:
輸入第一行給出物品個數N(≤1000);第二行給出N個正整數si(1≤si≤100,表示第i項物品的大小)。
輸出格式:
按照輸入順序輸出每一個物品的大小及其所在的箱子序號,每一個物品佔1行,最後一行輸出所需的箱子數目。
輸入樣例:
8
60 70 80 90 30 40 10 20
輸出樣例:
60 1
70 2
80 3
90 4
30 1
40 5
10 1
20 2
5
做者: DS課程組
單位: 浙江大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-11 汽車加油問題 (20分)
題目來源:王曉東《算法設計與分析》
一輛汽車加滿油後可行駛 n千米。旅途中有若干個加油站。設計一個有效算法,指出應 在哪些加油站停靠加油,使沿途加油次數最少。
輸入格式:
第一行有 2 個正整數n和 k(k<=1000 ),表示汽車加滿油後可行駛n千米,且旅途中有 k個加油站。 第二行有 k+1 個整數,表示第 k 個加油站與第k-1 個加油站之間的距離。 第 0 個加油站表示出發地,汽車已加滿油。 第 k+1 個加油站表示目的地。
輸出格式:
輸出最少加油次數。若是沒法到達目的地,則輸出「No Solution!」。
輸入樣例:
7 7
1 2 3 4 5 1 6 6
輸出樣例:
4
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-12 會場安排問題 (20分)
題目來源:王曉東《算法設計與分析》
假設要在足夠多的會場裏安排一批活動,並但願使用盡量少的會場。設計一個有效的 貪心算法進行安排。(這個問題其實是著名的圖着色問題。若將每個活動做爲圖的一個 頂點,不相容活動間用邊相連。使相鄰頂點着有不一樣顏色的最小着色數,相應於要找的最小 會場數。)
輸入格式:
第一行有 1 個正整數k,表示有 k個待安排的活動。 接下來的 k行中,每行有 2個正整數,分別表示 k個待安排的活動開始時間和結束時間。時間 以 0 點開始的分鐘計。
輸出格式:
輸出最少會場數。
輸入樣例:
5
1 23
12 28
25 35
27 80
36 50
輸出樣例:
在這裏給出相應的輸出。例如:
3
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-13 最優合併問題 (20分)
題目來源:王曉東《算法設計與分析》
給定k 個排好序的序列, 用 2 路合併算法將這k 個序列合併成一個序列。 假設所採用的 2 路合併算法合併 2 個長度分別爲m和n的序列須要m+n-1 次比較。試設 計一個算法肯定合併這個序列的最優合併順序,使所需的總比較次數最少。 爲了進行比較,還須要肯定合併這個序列的最差合併順序,使所需的總比較次數最多。
輸入格式:
第一行有 1 個正整數k,表示有 k個待合併序列。 第二行有 k個正整數,表示 k個待合併序列的長度。
輸出格式:
輸出最多比較次數和最少比較次數。
輸入樣例:
在這裏給出一組輸入。例如:
4
5 12 11 2
輸出樣例:
在這裏給出相應的輸出。例如:
78 52
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-14 看電影 (20分)
終於到週末了,明明是特別喜歡看電影。他想在一天內儘可能多的看到完整的多部電影。 如今他把他喜歡的電影的播放時間表給你,但願你能幫他合理安排。
輸入格式:
輸入包含多組測試數據。每組輸入的第一行是一個整數n(n<=100),表示明明喜歡的電影的總數。 接下來n行,每行輸入兩個整數si和ei(1<=i<=n),表示第i個電影的開始和結束時間,爲了簡化問題,每一個時間都用一個正整數表示。 當n=0時,輸入結束。
輸出格式:
對於每組輸入,輸出能完整看到的電影的個數。
輸入樣例:
在這裏給出一組輸入。例如:
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0
輸出樣例:
在這裏給出相應的輸出。例如:
5
做者: 王會勇
單位: 河北科技大學
時間限制: 1000 ms
內存限制: 32 MB
代碼長度限制: 16 KB
題目詳情
7-15 最近距離 (30分)
在一個遊戲中,玩家處於一個以下所示12行12列的迷宮:
0,1,0,0,0,1,1,1,0,1,0,1
0,0,0,1,0,0,0,0,1,0,0,1
0,1,0,1,0,1,1,1,0,1,0,0
0,1,0,0,0,0,0,1,0,0,1,1
0,0,0,0,1,0,0,0,0,0,0,0
0,0,1,0,0,0,1,0,0,0,1,0
0,0,1,0,0,0,0,0,1,0,0,0
1,0,0,1,0,1,0,0,0,1,0,1
0,0,1,0,1,0,1,0,1,0,0,0
0,0,0,0,0,1,0,0,0,1,1,0
0,0,0,0,0,1,0,0,0,0,0,0
0,1,0,1,0,0,0,1,0,1,0,0
其中迷宮由0,1組成,0表示道路,1表示障礙物。
如今要根據玩家和遊戲中被攻擊的虛擬boss所在位置,給玩家以最近距離的提示。
最近距離:即玩家走到boss所走的最少步數。(注:路線中的一步是指從一個座標點走到其上下左右相鄰座標點。)
輸入格式:
輸入4個整數a,b,c,d(即玩家和虛擬boss在迷宮中的座標位置分別爲(a,b) 、(c,d)), 其中 0<=a,b,c,d<12。
輸出格式:
輸出在迷宮中從(a,b)出發到達(c,d)的最少步數,若是(a,b)永遠沒法到達(c,d)則輸出10000。
輸入樣例:
在這裏給出一組輸入。例如:
0 0 11 11
輸出樣例:
在這裏給出相應的輸出。例如:
22
做者: 高見元
單位: 湖北經濟學院
時間限制: 1000 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-16 子集和問題 (30分)
設集合S={x1,x2,…,xn}是一個正整數集合,c是一個正整數,子集和問題斷定是否存在S的一個子集S1,使S1中的元素之和爲c。試設計一個解子集和問題的回溯法。
輸入格式:
輸入數據第1行有2個正整數n和c,n表示S的大小,c是子集和的目標值。接下來的1行中,有n個正整數,表示集合S中的元素。 是子集和的目標值。接下來的1 行中,有n個正整數,表示集合S中的元素。
輸出格式:
輸出子集和問題的解,以空格分隔,最後一個輸出的後面有空格。當問題無解時,輸出「No Solution!」。
輸入樣例:
在這裏給出一組輸入。例如:
5 10
2 2 6 5 4
輸出樣例:
在這裏給出相應的輸出。例如:
2 2 6
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-17 最佳調度問題 (35分)
假設有n(n<=20)個任務由k(k<=20)個可並行工做的機器完成。完成任務i須要的時間爲ti。 試設計一個算法,對任意給定的整數n和k,以及完成任務i 須要的時間爲ti ,i=1~n。計算完成這n個任務的最佳調度,使得完成所有任務的時間最先。
輸入格式:
輸入數據的第一行有2 個正整數n和k。第2 行的n個正整數是完成n個任務須要的時間。
輸出格式:
將計算出的完成所有任務的最先時間輸出到屏幕。
輸入樣例:
在這裏給出一組輸入。例如:
7 3
2 14 4 16 6 5 3
輸出樣例:
在這裏給出相應的輸出。例如:
17
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-18 找零錢*** (20分)
收銀員現有 n 張面值分別爲 v1,v2,...,vn 的紙幣。若找零金額爲 m,則一共有多少種找零方法?
注:0<n≤1000,0<v1,v2,...,vn≤10000,0<m≤10000
輸入格式
n v1,v2,...,vn m
輸出格式
如有解,則輸出所有找零方案,每輸出一種 若無解,則輸出「None」
輸入樣例1
6
3 1 4 3 2 7
9
輸出樣例1
3 1 3 2
3 4 2
4 3 2
2 7
輸入樣例2
5
5 3 4 6 7
2
輸出樣例2
None
做者: 李祥
單位: 湖北經濟學院
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-19 工做分配問題 (20分)
設有n件工做分配給n我的。將工做i分配給第j我的所需的費用爲cij 。 設計一個算法,對於給定的工做費用,爲每個人都分配1 件不一樣的工做,並使總費用達到最小。
輸入格式:
輸入數據的第一行有1 個正整數n (1≤n≤20)。接下來的n行,每行n個數,表示工做費用。
輸出格式:
將計算出的最小總費用輸出到屏幕。
輸入樣例:
在這裏給出一組輸入。例如:
3
10 2 3
2 3 4
3 4 5
輸出樣例:
在這裏給出相應的輸出。例如:
9
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-20 單調遞增最長子序列 (20分)
設計一個O(n2)時間的算法,找出由n個數組成的序列的最長單調遞增子序列。
輸入格式:
輸入有兩行: 第一行:n,表明要輸入的數列的個數 第二行:n個數,數字之間用空格格開
輸出格式:
最長單調遞增子序列的長度
輸入樣例:
在這裏給出一組輸入。例如:
5
1 3 5 2 9
輸出樣例:
在這裏給出相應的輸出。例如:
4
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-21 迴文串問題 (40分)
一個字符串,若是從左到右讀和從右到左讀是徹底同樣的,好比"aba",咱們稱其爲迴文串。如今給你一個字符串,可在任意位置添加字符,求最少添加幾個字符,才能使其變成一個迴文串。
輸入格式:
任意給定的一個字符串,其長度不超過1000.
輸出格式:
能變成迴文串所需添加的最少字符數。
輸入樣例:
在這裏給出一組輸入。例如:
Ab3bd
Abb
輸出樣例:
在這裏給出相應的輸出。例如:
2
1
做者: 高見元
單位: 湖北經濟學院
時間限制: 1000 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-22 最大子段和 (20分)
給定n個整數(可能爲負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均爲負數時,定義子段和爲0。
要求算法的時間複雜度爲O(n)。
輸入格式:
輸入有兩行:
第一行是n值(1<=n<=10000);
第二行是n個整數。
輸出格式:
輸出最大子段和。
輸入樣例:
在這裏給出一組輸入。例如:
6
-2 11 -4 13 -5 -2
輸出樣例:
在這裏給出相應的輸出。例如:
20
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-23 整數拆分 (20分)
給定一個整數n,將其無序拆分紅最大數爲k的拆分數,(n,k不超出100) 要求:全部的拆分方案不重複。 如當n=4,k=4時,一共有5種拆分方案,拆分以下:
(1)4=1+1+1+1
(2)4=1+1+2
(3)4=1+3
(4)4=2+2
(5)4=4
輸入格式:
每一行輸入一組整數n,k,遇到鍵盤結束符^Z或文件結束符EOF時結束輸入。
輸出格式:
按行輸出每組的拆分方案數。
輸入樣例:
4,4
5,4
輸出樣例:
5
6
做者: 張慶
單位: 集美大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-24 青蛙跳臺階 (30分)
一隻青蛙一次能夠跳上 1 級臺階,也能夠跳上2 級。求該青蛙跳上一個n 級的臺階總共有多少種跳法。
輸入格式:
首先輸入數字n,表明接下來有n組輸入,50>=n>=0,而後每行一個數字,表明臺階數,數字爲小於60的整數
輸出格式:
對每一組輸入,輸出青蛙的跳法。
輸入樣例:
3
1
2
3
輸出樣例:
1
2
3
做者: 房正華
單位: 青島工學院
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-25 朋友圈 (30分)
某學校有N個學生,造成M個俱樂部。每一個俱樂部裏的學生有着必定類似的興趣愛好,造成一個朋友圈。一個學生能夠同時屬於若干個不一樣的俱樂部。根據「個人朋友的朋友也是個人朋友」這個推論能夠得出,若是A和B是朋友,且B和C是朋友,則A和C也是朋友。請編寫程序計算最大朋友圈中有多少人。
輸入格式:
輸入的第一行包含兩個正整數N(≤30000)和M(≤1000),分別表明學校的學生總數和俱樂部的個數。後面的M行每行按如下格式給出1個俱樂部的信息,其中學生從1~N編號:
第i個俱樂部的人數Mi(空格)學生1(空格)學生2 … 學生Mi
輸出格式:
輸出給出一個整數,表示在最大朋友圈中有多少人。
輸入樣例:
7 4
3 1 2 3
2 1 4
3 5 6 7
1 6
輸出樣例:
4
做者: DS課程組
單位: 浙江大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-26 願天下有情人都是失散多年的兄妹 (30分)
呵呵。你們都知道五服之內不得通婚,即兩我的最近的共同祖先若是在五代之內(即本人、父母、祖父母、曾祖父母、高祖父母)則不可通婚。本題就請你幫助一對有情人判斷一下,他們到底是否能夠成婚?
輸入格式:
輸入第一行給出一個正整數
N
(2 ≤
N
≤104),隨後
N
行,每行按如下格式給出一我的的信息:
本人ID 性別 父親ID 母親ID
其中
ID
是5位數字,每人不一樣;性別
M
表明男性、
F
表明女性。若是某人的父親或母親已經不可考,則相應的
ID
位置上標記爲
-1
。
接下來給出一個正整數
K
,隨後
K
行,每行給出一對有情人的
ID
,其間以空格分隔。
注意:題目保證兩我的是同輩,每人只有一個性別,而且血緣關係網中沒有亂倫或隔輩成婚的狀況。
輸出格式:
對每一對有情人,判斷他們的關係是否能夠通婚:若是兩人是同性,輸出
Never Mind
;若是是異性而且關係出了五服,輸出
Yes
;若是異性關係未出五服,輸出
No
。
輸入樣例:
24
00001 M 01111 -1
00002 F 02222 03333
00003 M 02222 03333
00004 F 04444 03333
00005 M 04444 05555
00006 F 04444 05555
00007 F 06666 07777
00008 M 06666 07777
00009 M 00001 00002
00010 M 00003 00006
00011 F 00005 00007
00012 F 00008 08888
00013 F 00009 00011
00014 M 00010 09999
00015 M 00010 09999
00016 M 10000 00012
00017 F 012
000 F 110 00013
00019 F 11100 00018
00020 F 00015 11110
00021 M 11100 00020
00022 M 00016 -1
00023 M 10012 00017
00024 M 00022 10013
9
00021 00024
00019 00024
00011 00012
00022 00018
00001 00004
00013 00016
00017 00015
00019 00021
00010 00011
輸出樣例:
Never Mind
Yes
Never Mind
No
Yes
No
Yes
No
No
做者: 陳越
單位: 浙江大學
時間限制: 200 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-27 列出全部祖先結點 (20分)
對於給定的二叉樹,本題要求你按從上到下順序輸出指定結點的全部祖先結點。
輸入格式:
首先第一行給出一個正整數 N(≤10),爲樹中結點總數。樹中的結點從 0 到 N−1 編號。
隨後 N 行,每行給出一個對應結點左右孩子的編號。若是某個孩子不存在,則在對應位置給出 "-"。編號間以 1 個空格分隔。
最後一行給出一個結點的編號i(0≤i≤N-1)。
輸出格式:
在一行中按規定順序輸出i的全部祖先結點的編號。編號間以 1 個空格分隔,行首尾不得有多餘空格。
輸入樣例:
7
2 -
- 6
- -
0 5
- -
4 1
- -
4
輸出樣例:
3 5
做者: DS課程組
單位: 臨沂大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-28 深刻虎穴 (35分)
著名的王牌間諜 007 須要執行一次任務,獲取敵方的機密情報。已知情報藏在一個地下迷宮裏,迷宮只有一個入口,裏面有不少條通路,每條路通向一扇門。每一扇門背後或者是一個房間,或者又有不少條路,一樣是每條路通向一扇門…… 他的手裏有一張表格,是其餘間諜幫他收集到的情報,他們記下了每扇門的編號,以及這扇門背後的每一條通路所到達的門的編號。007 發現不存在兩條路通向同一扇門。
內線告訴他,情報就藏在迷宮的最深處。可是這個迷宮太大了,他須要你的幫助 —— 請編程幫他找出距離入口最遠的那扇門。
輸入格式:
輸入首先在一行中給出正整數 N(<105),是門的數量。最後 N 行,第 i 行(1≤i≤N)按如下格式描述編號爲 i 的那扇門背後能通向的門:
K D[1] D[2] ... D[K]
其中
K
是通道的數量,其後是每扇門的編號。
輸出格式:
在一行中輸出距離入口最遠的那扇門的編號。題目保證這樣的結果是惟一的。
輸入樣例:
13
3 2 3 4
2 5 6
1 7
1 8
1 9
0
2 11 10
1 13
0
0
1 12
0
0
輸出樣例:
12
做者: 陳越
單位: 浙江大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-29 城市間緊急救援 (25分)
做爲一個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些鏈接城市的快速道路。每一個城市的救援隊數量和每一條鏈接兩個城市的快速道路長度都標在地圖上。當其餘城市有緊急求助電話給你的時候,你的任務是帶領你的救援隊儘快趕往事發地,同時,一路上召集儘量多的救援隊。
輸入格式:
輸入第一行給出4個正整數N、M、S、D,其中N(2≤N≤500)是城市的個數,順便假設城市的編號爲0 ~ (N−1);M是快速道路的條數;S是出發地的城市編號;D是目的地的城市編號。
第二行給出N個正整數,其中第i個數是第i個城市的救援隊的數目,數字間以空格分隔。隨後的M行中,每行給出一條快速道路的信息,分別是:城市一、城市二、快速道路的長度,中間用空格分開,數字均爲整數且不超過500。輸入保證救援可行且最優解惟一。
輸出格式:
第一行輸出最短路徑的條數和可以召集的最多的救援隊數量。第二行輸出從S到D的路徑中通過的城市編號。數字間以空格分隔,輸出結尾不能有多餘空格。
輸入樣例:
4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2
輸出樣例:
2 60
0 1 3
做者: 陳越
單位: 浙江大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-30 紅色警報 (25分)
戰爭中保持各個城市間的連通性很是重要。本題要求你編寫一個報警程序,當失去一個城市致使國家被分裂爲多個沒法連通的區域時,就發出紅色警報。注意:若該國原本就不徹底連通,是分裂的k個區域,而失去一個城市並不改變其餘城市之間的連通性,則不要發出警報。
輸入格式:
輸入在第一行給出兩個整數
N
(0 <
N
≤ 500)和
M
(≤ 5000),分別爲城市個數(因而默認城市從0到
N
-1編號)和鏈接兩城市的通路條數。隨後
M
行,每行給出一條通路所鏈接的兩個城市的編號,其間以1個空格分隔。在城市信息以後給出被攻佔的信息,即一個正整數
K
和隨後的
K
個被攻佔的城市的編號。
注意:輸入保證給出的被攻佔的城市編號都是合法的且無重複,但並不保證給出的通路沒有重複。
輸出格式:
對每一個被攻佔的城市,若是它會改變整個國家的連通性,則輸出
Red Alert: City k is lost!
,其中
k
是該城市的編號;不然只輸出
City k is lost.
便可。若是該國失去了最後一個城市,則增長一行輸出
Game Over.
。
輸入樣例:
5 4
0 1
1 3
3 0
0 4
5
1 2 0 4 3
輸出樣例:
City 1 is lost.
City 2 is lost.
Red Alert: City 0 is lost!
City 4 is lost.
City 3 is lost.
Game Over.
做者: 陳越
單位: 浙江大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-31 拯救007(升級版) (30分)
在老電影「007之生死關頭」(Live and Let Die)中有一個情節,007被毒販抓到一個鱷魚池中心的小島上,他用了一種極爲大膽的方法逃脫 —— 直接踩着池子裏一系列鱷魚的大腦殼跳上岸去!(聽說當年替身演員被最後一條鱷魚咬住了腳,幸虧穿的是特別加厚的靴子才逃過一劫。)
設鱷魚池是長寬爲100米的方形,中心座標爲 (0, 0),且東北角座標爲 (50, 50)。池心島是以 (0, 0) 爲圓心、直徑15米的圓。給定池中分佈的鱷魚的座標、以及007一次能跳躍的最大距離,你須要給他指一條最短的逃生路徑 —— 所謂「最短」是指007要跳躍的步數最少。
輸入格式:
首先第一行給出兩個正整數:鱷魚數量 N(≤100)和007一次能跳躍的最大距離 D。隨後 N 行,每行給出一條鱷魚的 (x,y) 座標。注意:不會有兩條鱷魚待在同一個點上。
輸出格式:
若是007有可能逃脫,首先在第一行輸出007須要跳躍的最少步數,而後從第二行起,每行給出從池心島到岸邊每一步要跳到的鱷魚的座標 (x,y)。若是沒可能逃脫,就在第一行輸出 0 做爲跳躍步數。若是最短路徑不惟一,則輸出第一跳最近的那個解,題目保證這樣的解是惟一的。
輸入樣例 1:
17 15
10 -21
10 21
-40 10
30 -50
20 40
35 10
0 -10
-25 22
40 -40
-30 30
-10 22
0 11
25 21
25 10
10 10
10 35
-30 10
輸出樣例 1:
4
0 11
10 21
10 35
輸入樣例 2:
4 13
-12 12
12 12
-12 -12
12 -12
輸出樣例 2:
0
做者: 陳越
單位: 浙江大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-32 直搗黃龍 (30分)
本題是一部戰爭大片 —— 你須要從己方大本營出發,一路攻城略地殺到敵方大本營。首先時間就是生命,因此你必須選擇合適的路徑,以最快的速度佔領敵方大本營。當這樣的路徑不惟一時,要求選擇能夠沿途解放最多城鎮的路徑。若這樣的路徑也不惟一,則選擇能夠有效殺傷最多敵軍的路徑。
輸入格式:
輸入第一行給出 2 個正整數 N(2 ≤ N ≤ 200,城鎮總數)和 K(城鎮間道路條數),以及己方大本營和敵方大本營的代號。隨後 N-1 行,每行給出除了己方大本營外的一個城鎮的代號和駐守的敵軍數量,其間以空格分隔。再後面有 K 行,每行按格式
城鎮1 城鎮2 距離
給出兩個城鎮之間道路的長度。這裏設每一個城鎮(包括雙方大本營)的代號是由 3 個大寫英文字母組成的字符串。
輸出格式:
按照題目要求找到最合適的進攻路徑(題目保證速度最快、解放最多、殺傷最強的路徑是惟一的),並在第一行按照格式
己方大本營->城鎮1->...->敵方大本營
輸出。第二行順序輸出最快進攻路徑的條數、最短進攻距離、殲敵總數,其間以 1 個空格分隔,行首尾不得有多餘空格。
輸入樣例:
10 12 PAT DBY
DBY 100
PTA 20
PDS 90
PMS 40
TAP 50
ATP 200
LNN 80
LAO 30
LON 70
PAT PTA 10
PAT PMS 10
PAT ATP 20
PAT LNN 10
LNN LAO 10
LAO LON 10
LON DBY 10
PMS TAP 10
TAP DBY 10
DBY PDS 10
PDS PTA 10
DBY ATP 10
輸出樣例:
PAT->PTA->PDS->DBY
3 30 210
做者: 陳越
單位: 浙江大學
時間限制: 150 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-33 生化危機 (20分)
人類正在經歷一場生化危機,許多城市已經被病毒侵襲,這些城市中的人們爲了不感染病毒,計劃開車逃往其餘沒有被病毒入侵的城市(安全城市)。有些城市之間有公路直達,有些沒有。雖然他們知道哪些城市是安全的,可是不知道有沒有一條安全路徑可以到達安全城市(只有該路徑上通過的全部城市都是安全的,該路徑纔是安全路徑)。請你編寫一個程序幫助他們判斷。
輸入格式:
輸入第一行爲三個正整數,分別表示全部城市個數m(m<=100)、安全城市個數n(m<=50)、公路個數k(k<=100)。隨後一行給出n個安全城市的編號。隨後k行,每一行給出兩個整數,表示鏈接一條公路的兩個城市編號。最後一行輸入兩個整數,分別表示當前所在城市s、目標城市d。每行整數之間都用空格分隔。
輸出格式:
若目標城市已被病毒入侵(非安全城市),輸出"The City i is not safe!";若目標城市爲安全城市且從當前所在城市可以通過一條安全路徑到達目標城市,輸出"The city can arrive safely!";若目標城市爲安全城市可是從當前所在城市沒有一條安全路徑到達目標城市,輸出"The city can not arrive safely!",i爲目標城市編號。
輸入樣例1:
5 2 5
3 4
0 1
0 2
0 4
1 2
2 4
0 4
輸出樣例1:
The city 4 can arrive safely!
輸入樣例2:
5 2 5
3 4
0 1
0 2
0 4
1 2
2 4
0 3
輸出樣例2:
The city 3 can not arrive safely!
輸入樣例3:
5 2 5
3 4
0 1
0 2
0 4
1 2
2 4
0 1
輸出樣例3:
The city 1 is not safe!
做者: DS課程組
單位: 臨沂大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-34 孤島營救問題 (30分)
1944 年,特種兵麥克接到國防部的命令,要求當即趕赴太平洋上的一個孤島,營救被敵軍俘虜的大兵瑞恩。瑞恩被關押在一個迷宮裏,迷宮地形複雜,但幸虧麥克獲得了迷宮的地形圖。迷宮的外形是一個長方形, 其南北方向被劃分爲 n 行,東西方向被劃分爲 m 列,因而整個迷宮被劃分爲 n×m 個單元。每個單元的位置可用一個有序數對 (單元的行號, 單元的列號) 來表示。南北或東西方向相鄰的 2 個單元之間可能互通,也可能有一扇鎖着的門,或者是一堵不可逾越的牆。迷宮中有一些單元存放着鑰匙,而且全部的門被分紅 p 類, 打開同一類的門的鑰匙相同,不一樣類門的鑰匙不一樣。
大兵瑞恩被關押在迷宮的東南角,即 (n,m) 單元裏,並已經昏迷。迷宮只有一個入口, 在西北角。也就是說,麥克能夠直接進入 (1,1) 單元。另外,麥克從一個單元移動到另外一個 相鄰單元的時間爲 1,拿取所在單元的鑰匙的時間以及用鑰匙開門的時間可忽略不計。
試設計一個算法,幫助麥克以最快的方式到達瑞恩所在單元,營救大兵瑞恩。
輸入格式:
第一行有三個整數,分別表示n,m,p的值。
第二行是一個整數k,表示迷宮中門和牆的總數。
第 i+2 行 (1≤i≤k),有 5 個整數, 依次爲 xi1,yi1,xi2,yi2,gi :當 gi≥1 時,表示 (xi1,yi1) 單元 與 (xi2,yi2) 單元之間有一扇第 gi 類的門,當 gi=0 時, 表 示 (xi1,yi1) 單元與 (xi2,yi2) 單元之間有一堵不可逾越的牆。
第 k+3 行是一個整數 s,表示迷宮中存放的鑰匙總數。
第 k+3+j 行 (1≤j≤s) ,有 3 個整數,依次爲 xi1,yi1,qi,表示第 j 把鑰匙存放在 (xi1,yi1) 單元裏,而且第 j 把鑰匙是用來開啓第 qi 類門。
輸入數據中同一行各相鄰整數之間用一個空格分隔。
數據保證有
∣xi1−xi2∣+∣yi1−yi2∣=1,0≤gi≤p
1≤qi≤p
n,m,p≤10,k<150
輸出格式:
輸出麥克營救到大兵瑞恩的最短期。若是問題無解,則輸出 −1。
輸入樣例:
在這裏給出一組輸入。例如:
4 4 9
9
1 2 1 3 2
1 2 2 2 0
2 1 2 2 0
2 1 3 1 0
2 3 3 3 0
2 4 3 4 1
3 2 3 3 0
3 3 4 3 0
4 3 4 4 0
2
2 1 2
4 2 1
輸出樣例:
在這裏給出相應的輸出。例如:
14
做者: 小黑
單位: 臨沂大學
時間限制: 4000 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-35 編輯三角形 (30分)
二維平面上有一個三角形,能夠經過命令對其進行編輯。 其中命令 translate dx dy 是將三角形平移(dx,dy); 命令 rotate angle 是將三角形繞本身的中心位置(三個頂點的平均位置)旋轉angle(角度制); 命令 scale ratio 是將三角形相對於本身的中心位置縮放ratio(例如1.0表示不縮放,2.0表示放大一倍,0.5表示縮小一倍); 命令 undo 是撤銷剛纔的一個編輯操做。
輸入格式:
第一行給出六個實數x0 y0 x1 y1 x2 y2 表示該三角形的三個頂點座標。第二行給出正整數n (1=< n <=100),表示命令個數,隨後n行給出具體的編輯命令。
輸出格式:
輸出被編輯後的三角形的三個頂點座標。每一個數之間用一個空格分割,最後一個數後面不要多加空格。全部實數保留3位小數。
樣例:
例如輸入1:
3.0 3.0 4.0 3.0 3.0 4.0
1
translate 1.5 -1.5
輸出:
4.500 1.500 5.500 1.500 4.500 2.500
例如輸入2:
3.0 3.0 4.0 3.0 3.0 4.0
1
rotate 90.0
輸出:
3.667 3.000 3.667 400 2.667 3.000
例如輸入3:
3.0 3.0 4.0 3.0 3.0 4.0
1
scale 0.5
輸出:
3.167 3.167 3.667 3.167 3.167 3.667
例如輸入4:
3.0 3.0 4.0 3.0 3.0 4.0
4
scale 0.5
undo
rotate 90.0
translate 0.5 0.6
輸出:
4.167 3.600 4.167 4.600 3.167 3.600
做者: dingzh
單位: 金陵科技學院
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-36 角度與多邊形 (20分)
給你一個角度 ang.
你可否在一個正 n 邊形上找到三個頂點 a,b,c 使得 ∠abc =ang.
若是存在多個這樣的正多邊形,輸出最小的那個。
若是不存在這個多邊形,請輸出 −1.
輸入格式:
第一行包含一個正整數 T(1≤T≤180),表明詢問的次數。
接下來 T 行,每行給出一個角度 ang(1≤ang≤180).
輸出格式:
在一行裏按要求輸出對應詢問的答案。
輸入樣例:
1
54
輸出樣例:
10
樣例解釋:
樣例對應圖片上的狀況
做者: 小黑
單位: 臨沂大學
時間限制: 1000 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-37 英文單詞排序 (30分)
本題要求編寫程序,輸入若干英文單詞,對這些單詞按長度從小到大排序後輸出。若是長度相同,按照輸入的順序不變。
輸入格式:
輸入爲若干英文單詞,每行一個,以
#
做爲輸入結束標誌。其中英文單詞總數不超過20個,英文單詞爲長度小於10的僅由小寫英文字母組成的字符串。
輸出格式:
輸出爲排序後的結果,每一個單詞後面都額外輸出一個空格。
輸入樣例:
blue
red
yellow
green
purple
#
輸出樣例:
red blue green yellow purple
做者: 張泳
單位: 浙江大學城市學院
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-38 互評成績 (30分)
學生互評做業的簡單規則是這樣定的:每一個人的做業會被
k
個同窗評審,獲得
k
個成績。系統須要去掉一個最高分和一個最低分,將剩下的分數取平均,就獲得這個學生的最後成績。本題就要求你編寫這個互評系統的算分模塊。
輸入格式:
輸入第一行給出3個正整數
N
(3 <
N
≤104,學生總數)、
k
(3 ≤
k
≤ 10,每份做業的評審數)、
M
(≤ 20,須要輸出的學生數)。隨後
N
行,每行給出一份做業獲得的
k
個評審成績(在區間[0, 100]內),其間以空格分隔。
輸出格式:
按非遞減順序輸出最後得分最高的
M
個成績,保留小數點後3位。分數間有1個空格,行首尾不得有多餘空格。
輸入樣例:
6 5 3
88 90 85 99 60
67 60 80 76 70
90 93 96 99 99
78 65 77 70 72
88 88 88 88 88
55 55 55 55 55
輸出樣例:
87.667 88.000 96.000
做者: 陳越
單位: 浙江大學
時間限制: 300 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-39 租用遊艇問題 (20分)
題目來源:王曉東,《算法設計與分析》
長江遊艇俱樂部在長江上設置了n個遊艇出租站1,2,…,n。遊客可在這些遊艇出租站租用遊艇,並在下游的任何一個遊艇出租站歸還遊艇。遊艇出租站i到遊艇出租站j之間的租金爲r(i,j),1<=i<j<=n。試設計一個算法,計算出從遊艇出租站1 到遊艇出租站n所需的最少租金。
輸入格式:
第1 行中有1 個正整數n(n<=200),表示有n個遊艇出租站。接下來的第1到第n-1 行,第i行表示第i站到第i+1站,第i+2站, ... , 第n站的租金。
輸出格式:
輸出從遊艇出租站1 到遊艇出租站n所需的最少租金。
輸入樣例:
在這裏給出一組輸入。例如:
3
5 15
7
輸出樣例:
在這裏給出相應的輸出。例如:
12
做者: 陳曉梅
單位: 廣東外語外貿大學
時間限制: 400 ms
內存限制: 64 MB
代碼長度限制: 16 KB
題目詳情
7-40 修理牧場 (20分)
農夫要修理牧場的一段柵欄,他測量了柵欄,發現須要N塊木頭,每塊木頭長度爲整數Li個長度單位,因而他購買了一條很長的、能鋸成N塊的木頭,即該木頭的長度是Li的總和。
可是農夫本身沒有鋸子,請人鋸木的酬金跟這段木頭的長度成正比。爲簡單起見,不妨就設酬金等於所鋸木頭的長度。例如,要將長度爲20的木頭鋸成長度爲八、7和5的三段,第一次鋸木頭花費20,將木頭鋸成12和8;第二次鋸木頭花費12,將長度爲12的木頭鋸成7和5,總花費爲32。若是第一次將木頭鋸成15和5,則第二次鋸木頭花費15,總花費爲35(大於32)。
請編寫程序幫助農夫計算將木頭鋸成N塊的最少花費。
輸入格式:
輸入首先給出正整數N(≤104),表示要將木頭鋸成N塊。第二行給出N個正整數(≤50),表示每段木塊的長度。
輸出格式:
輸出一個整數,即將木頭鋸成N塊的最少花費。
輸入樣例:
8
4 5 1 2 1 3 1 1
輸出樣例:
49
做者: DS課程組單位: 浙江大學時間限制: 400 ms內存限制: 64 MB代碼長度限制: 16 KB題目詳情