洛谷 P1080 國王遊戲

2021-09-26 08:00:08 字數 1452 閱讀 5052

這是一道貪心題,貪心的策略是將大臣們按左右手金幣的乘積公升序排列,具體證明過程可以參見洛谷大佬的題解,這裡就不再贅述了。

因為本菜雞之前沒有接觸過高精度運算,對c++的運算子過載也不太熟練,所以正好藉此機會記錄一下用到的高精度模版。模版框架參考於:

然而,直接複製該模版會導致tle,原因在於這道題只需要高精度乘(除)低精度即可,但模版的乘除法運算是支援雙高精度的,依賴於高精度的加減法,演算法更加複雜,對於這道題來說增加了不必要的時間開銷。所以我們需要把乘除法修改一下,刪除高精度加減法的部分,得到如下簡化版的**,並順利ac。

#include #include #include #include using namespace std;

const int maxn = 10010;

struct bign

bign (int num)

bign (const char *num)

bign operator = (const int num)

bign operator = (const char *num)

void clean()

bign operator * (const int &b)

c.clean();

return c;

}bign operator *= (const int &b)

bign operator / (const int &b)

}c.len = len;

c.clean();

return c;

}bign operator /= (const int &b)

bool operator < (const bign &b)

return false;

}bool operator > (const bign &b)

return false;

}bool operator == (const bign &b)

bool operator >= (const bign &b)

string str() const

};istream& operator >> (istream &in, bign &x)

ostream& operator << (ostream &out, const bign &x)

struct minister

;bool cmp(minister a, minister b)

int main()

sort(queue.begin(), queue.end(), cmp);

bign reward, maxreward = 0;

bign product = kingleft;

for (int i = 0; i < n; i++)

cout << maxreward << endl;

return 0;

}

洛谷 P1080 國王遊戲

原題 題目描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前...

洛谷P1080 國王遊戲

洛谷p1080 國王遊戲 題目描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數...

洛谷P1080 國王遊戲

恰逢 h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手上的數...