洛谷p1080 國王遊戲
題目描述
恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下乙個整數,國王自己也在左、右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是:排在該大臣前面的所有人的左手上的數的乘積除以他自己右手上的數,然後向下取整得到的結果。
國王不希望某乙個大臣獲得特別多的獎賞,所以他想請你幫他重新安排一下隊伍的順序,使得獲得獎賞最多的大臣,所獲獎賞盡可能的少。注意,國王的位置始終在隊伍的最前面。
輸入輸出格式
輸入格式:
第一行包含乙個整數 n,表示大臣的人數。
第二行包含兩個整數 a和 b,之間用乙個空格隔開,分別表示國王左手和右手上的整數。
接下來 n 行,每行包含兩個整數 a 和 b,之間用乙個空格隔開,分別表示每個大臣左手和右手上的整數。
輸出格式:
輸出只有一行,包含乙個整數,表示重新排列後的隊伍中獲獎賞最多的大臣所獲得的金幣數。
輸入樣例:
3 1 1
2 3
7 4
4 6輸出樣例: 2
此外,此題還涉及到高精度數的乘法、除法及比較大小。
**如下(我的ide為vs2017社群版):
#include "stdafx.h"
#include
#include
#include
#include
#include
using
namespace
std;
struct minister
;int cmp(const
void* a, const
void* b)
vector
changetovec(int x)
return res;
}vector
multi(vector
num1, int num2)
while (carry)
return product;
}vector
devide(vector
num1, int num2)
}while (quotient.size() > 1 && quotient.back() == 0)
return quotient;
}int compare(vector
num1, vector
num2)
return
0; }
}int main()
qsort(arr + 1, n, sizeof(minister), cmp);
vector
max, temp;
max.push_back(0);
vector
product = changetovec(arr[0].l);
for (int i = 1; i < n + 1; i++)
for (int i = max.size() - 1; i >= 0; i--)
cout
<< max[i];
cout
<< endl;
deletearr;
return
0;}
洛谷 P1080 國王遊戲
原題 題目描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前...
洛谷P1080 國王遊戲
恰逢 h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手上的數...
洛谷 P1080 國王遊戲
這是一道貪心題,貪心的策略是將大臣們按左右手金幣的乘積公升序排列,具體證明過程可以參見洛谷大佬的題解,這裡就不再贅述了。因為本菜雞之前沒有接觸過高精度運算,對c 的運算子過載也不太熟練,所以正好藉此機會記錄一下用到的高精度模版。模版框架參考於 然而,直接複製該模版會導致tle,原因在於這道題只需要高...