about:blank
題解Problem 1 : leader誰是組長
問題描述 八中信息組需要選一個組長。信息組一共有n個人,分別用1到n編號,其中m個人參與了投票。得票數過半(票數大于m div 2)的人將被選為組長。 輸入數據將告知這m個人分別將票投給了誰,請統計出誰將擔任八中信息組的組長。
輸入數據 第一行兩個數n和m。 第二行有m個數,這些數都是不超過n的正整數,表明這m個人的選擇。
輸出數據 輸出將被選為組長的人。如果沒有人的票數過半,請輸出-1。
輸入樣例7 47 7 2 7
輸出樣例7
時間限制 各測試點1秒
內存限制 你的程序將被分配10MB的運行空間
數據規模 1<=n<=maxlongint 1<=m<=10000題解: matrix67給出的方法是快排。然后一個O(m)的掃描即可。不過我沒有用這種方法。正巧前幾天看書看到了一道跟這題一模一樣的題。據說曾經是ms的測試題。好了,回歸正題,這題題意無非就是m個數,范圍都在1-n中間,其實n是無用的。然后會有一個數出現的次數>m div 2。我們假設這個數的值是s,那么每次從這組數里去掉兩個不同的數,因為是不同的數,則至多只可從這些數中去掉一個s,那么如此一直進行下去。去到找不到兩個不同的數為止,則至少還會剩下一個s。當然,這是極端情況,大多數情況下應該會剩下不少s。復雜度為O(m)
Problem 2 : money最小花費
問題描述 在n個人中,某些人的銀行賬號之間可以互相轉賬。這些人之間轉賬的手續費各不相同。給定這些人之間轉賬時需要從轉賬金額里扣除百分之幾的手續費,請問A最少需要多少錢使得轉賬后B收到100元。
輸入數據 第一行輸入兩個正整數n,m,分別表示總人數和可以互相轉賬的人的對數。 以下m行每行輸入三個正整數x,y,z,表示標號為x的人和標號為y的人之間互相轉賬需要扣除z%的手續費 (z<100)。 最后一行輸入兩個正整數A,B。數據保證A與B之間可以直接或間接地轉賬。
輸出數據 輸出A使得B到賬100元最少需要的總費用。精確到小數點后8位。
輸入樣例3 31 2 12 3 21 3 31 3
輸出樣例103.07153164
內存限制 你的程序將被分配40MB的運行空間
數據規模 1<=n<=2000題解: 比較明顯的最短路徑模型。不過剛轉c++,我竟然不知道如何保留小數點后面的精度,所以這題就沒有寫精度。
Problem 3 : harm最小傷害
問題描述 把兒站在一個N x N的方陣中最左上角的格子里。他可以從一個格子走到它右邊和下邊的格子里。每一個格子都有一個傷害值。他想在受傷害最小的情況下走到方陣的最右下角。
輸入數據 第一行輸入一個正整數n。 以下n行描述該矩陣。矩陣中的數保證是不超過1000的正整數。
輸出數據 輸出最小傷害值。
樣例輸入31 3 32 2 23 1 2
樣例輸出8
數據規模 n<=1000題解:這題是更加明顯的動態規劃。直接上代碼……
Problem 4 : unique尋找代表
問題描述 八中一共有n個社團,分別用1到n編號。 八中一共有m個人,分別用1到m編號。每個人可以參加一個或多個社團,也可以不參加任何社團。 每個社團都需要選一個代表。我們希望更多的人能夠成為代表。
輸入數據 第一行輸入兩個數n和m。 以下n行每行若干個數,這些數都是不超過m的正整數。其中第i行的數表示社團i的全部成員。每行用一個0結束。
輸出數據 輸出最多的能夠成為代表的人數。
樣例輸入4 41 2 01 2 01 2 01 2 3 4 0
樣例輸出3
數據范圍 n,m<=200題解:2分圖匹配,匈牙利算法。
posted on 2009-07-28 18:47 Vincent 閱讀(724) 評論(0) 編輯 收藏 引用 所屬分類: 數據結構與算法
Powered by: C++博客 Copyright © Vincent