恰逢某國國慶,國王邀請n
nn位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下乙個整數,國王自己也在左、右手上各寫乙個整數。然後,讓這n
nn位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是:排在該大臣前面的所有人的左手上的數的乘積除以他自己右手上的數,然後向下取整得到的結果。國王不希望某乙個大臣獲得特別多的獎賞,所以他想請你幫他重新安排一下隊伍的順序,使得獲得獎賞最多的大臣,所獲獎賞盡可能的少。注意,國王的位置始終在隊伍的最前面。
輸入格式:
第一行包含乙個整數n
nn,表示大臣的人數。第二行包含兩個整數a
aa和b
bb,之間用乙個空格隔開,分別表示國王左手和右手上的整數。接下來n
nn行,每行包含兩個整數a
aa和b
bb,之間用乙個空格隔開,分別表示每個大臣左手和右手上的整數。
輸出格式:
輸出只有一行,包含乙個整數,表示重新排列後的隊伍中獲獎賞最多的大臣所獲得的金幣數。
資料範圍:
1 ≤n
≤1000
1≤n≤1000
1≤n≤10
000
#include
#include
using
namespace std;
const
int n =
1010
;pair<
int,
int> p[n]
;int n;
vector<
int>
mul(vector<
int> a,
int b)
return c;
}vector<
int>
div(vector<
int> a,
int b)
reverse
(c.begin()
, c.
end())
;if(c.empty()
) c.
push_back(0
);return c;
}vector<
int>
maxv
(vector<
int> a, vector<
int> b)
intmain()
;}sort
(p +
1, p + n +1)
; vector<
int>
res(1,
0); vector<
int>
prod(1
,1);
prod =
mul(prod, p[0]
.first)
;for
(int i =
1; i <= n; i++
)for
(int i = res.
size()
-1; i >=
0; i--
) cout << res[i]
; cout << endl;
return0;
}時間複雜度o(n
logn+
k)
o(n\log n+k)
o(nlogn+
k),k
kk是高精度需要的時間,最差情況下可能達到n
2n^2
n2,空間o(n
)o(n)
o(n)
。
AcWing 114 國王遊戲 貪心 大數處理
恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手...
AcWing 114 高精度運算)
恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手...
114 國王遊戲
除第乙個人以外的每個人能獲得的獎賞為他之前所有人的左手乘積除以自己右手上的值 注意是之前的所有人不包括自己 通過改變順序使得獲得最多獎賞最小化。貪心策略 受到奶牛的雜技這題的影響,我們發現乘積越大的要往後放除的大的也要往後放,所以我們根據左手右手的乘積從小到大排序,然後以此計算取max即可,交了之後...