题目描述

​ 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

​ 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

输入

​ 第一行包含一个整数 n,表示大臣的人数。

​ 第二行包含两个整数 a 和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。(均小于 10000)

​ 接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。(均小于 10000)

输出

​ 输出一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

代码实现

  • BigInt数据结构的实现,为了实现大整数运算
  • 涉及到的算法没有变化
  • 注意理解代码中const的实现。
#include <iostream>
#include <cmath>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<stack>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<vector>using namespace std;
typedef pair<int, int> PII;class BigInt : public vector<int> {public:BigInt(int x);void operator*=(int x);void operator/=(int x);BigInt operator/(int x);bool operator<(const BigInt &)const;bool operator>(const BigInt &)const;
private:void process_digit();
};ostream &operator<<(ostream &out, const BigInt &a) {for (int i = a.size() - 1; i >= 0; i--) {out << a[i];}return out;
}BigInt::BigInt(int x) {push_back(x);process_digit();
}void BigInt::process_digit() {for (int i = 0; i < size(); i++) {if (at(i) < 10) continue;if (i + 1 == size()) push_back(0);at(i + 1) += at(i) / 10;at(i) %= 10;}while (size() > 1 && at(size() - 1) == 0) pop_back();return ;
}void BigInt::operator*=(int x) {for (int i = 0; i < size(); i++) at(i) *= x;process_digit();return ;
}void BigInt::operator/=(int x) {int y = 0;for (int i = size() - 1; i >= 0; i--) {y = y * 10 + at(i);at(i) = y / x;y %= x;}process_digit();return ;
}BigInt BigInt::operator/(int x) {BigInt ret(*this);ret /= x;return ret;
}bool BigInt::operator<(const BigInt &a) const {if (size() - a.size()) return size() < a.size();for (int i = size() - 1; i >= 0; i--) {if (at(i) - a[i]) return at(i) < a[i];}return false;
}bool BigInt::operator>(const BigInt &a) const {return a < (*this);
}int main(int argc, char** argv)
{vector<PII> arr;int n;cin >> n;for(int i = 0, a,b; i <= n; i++) {cin >> a >> b;arr.push_back(PII(a, b));}sort(arr.begin() + 1, arr.end(), [](const PII &x, const PII &y) {return x.first * x.second < y.first * y.second;});BigInt p = arr[0].first, ans = 0;for (int i = 1; i <= n; i++) {BigInt temp = p / arr[i].second;ans = max(ans, temp);p *= arr[i].first;}cout << ans << endl;return 0;
}

后记

  • 还行吧,推荐一个博客链接,可以参考

国王游戏——c++实现相关推荐

  1. 【题解】P1080 国王游戏(贪心+高精python天下第一)

    P1080 国王游戏 题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排 ...

  2. 【贪心】国王游戏(ybtoj 贪心-1-4)

    国王游戏 ybtoj 贪心-1-4 题目大意 有一个国王和n个大臣 每人左右手分别有一个数,现在然你对大臣们排列(国王在第一个) 每个大臣所得金币是前面的人左手上的数的积除以他右手上的数 现在问你获得 ...

  3. # 国王游戏(贪心+大数乘除+微扰法证明)

    国王游戏(贪心+大数乘除+微扰法证明) 题意:n个大臣和一个国王,左右手都有一个数,排队,国王始终拍在最前面,每个大臣的奖励为这个大臣前面的人的左手上的数之积除以这个大臣右手上的数.构造最优队伍,使得 ...

  4. 洛谷P1080 国王游戏(贪心)

    国王游戏 题目描述 恰逢 HHH 国国庆,国王邀请 nnn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 nnn 位大臣排成 ...

  5. 国王游戏 [NOIP2012 提高组]

    国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n位大臣来玩一个有奖游戏. 首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王站在 ...

  6. 蓝桥云题库之国王游戏——Python满分解答

    国王游戏 题目描述 输入描述 输出描述 输入输出样例 示例输入 示例输出 解题思路 从推测开始 尝试优化排序方法 整理思路 代码实现 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏. ...

  7. 贪心算法——国王游戏

    题目描述 孙悟空给花果山的小猴子们分桃子. 首先,他让每只小猴在左.右手上面分别写下一个整数,悟空自己也在左.右手上各写一个整数. 然后,让这 n 只小猴排成一排,悟空站在队伍的最前面. 排好队后,所 ...

  8. 做题记(4)P1080 国王游戏

    今天,做了洛谷上的P1080 国王游戏,题目如下: 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整 ...

  9. NOIp2012D1T2 国王游戏 题解

    国王游戏 洛谷P1080国王游戏 题解 这道题有个重要的性质:如果交换相邻两个大臣,获得金钱变化的有且只有这两个大臣.其余大臣得到的金钱不变. 我们考虑第 i i i个大臣和第 i + 1 i+1 i ...

  10. NOIP2012 国王游戏

    2国王游戏 (game.cpp/c/pas) [问题描述] 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数 ...

最新文章

  1. python怎么用函数查看变量类型_查看变量类型的Python内置函数是()。
  2. Linux Shell编程入门
  3. 在matlab中如何使用SVM工具箱
  4. Python 5种方法实现单例模式
  5. java 字段映射注解_mybatis注解开发中实体属性和表字段不对应问题
  6. [Java基础]多态基础
  7. 在Spring Boot中使用@ConfigurationProperties
  8. 【qduoj - 纳新题】凑数题(恰好装满类0-1背包 或 母函数)
  9. MySQL锁系列3 MDL锁
  10. 【跃迁之路】【523天】程序员高效学习方法论探索系列(实验阶段280-2018.07.13)...
  11. 一、什么是统一社会信用代码
  12. 魔百盒CM201-2-YS代工-刷机固件及教程
  13. 按键扫描——74HC164驱动(一)
  14. 手把手教你完成微信H5支付
  15. PC客户端自动化测试-控件操作方法
  16. DFS深度优先搜索中的标记问题
  17. js调用android代码怎么写,Android端使用WebView注入一段js代码实现js调用android
  18. 基于NVIDIA TX2的usb basyer工业相机编码推流
  19. UNIAPP、微信小程序激励视频、插屏等封装
  20. 完整三菱 FX5U定位模块5轴 2轴插补伺服

热门文章

  1. 黑蚁数据工坊-地理信息行业数据生产全流程管控“工厂”
  2. “黑盒工坊”,轻松管理《魔兽世界》插件!
  3. 实时股票行情接口api有哪些?
  4. 【FI-AP】预付定金处理(Down payment)
  5. 【2】CH347应用--在OpenOCD添加CH347-USB转JTAG接口
  6. 驾驶证管理程序的实现java_驾驶证查询示例代码
  7. 最好用的共享文件服务器,文件共享有哪些方式,哪种比较好?
  8. Android Studio实现连连看小游戏,比比看谁过关最快~
  9. 【Android进阶】(1)使用开源框架AndroidAnnotation
  10. 石家庄发展史 9(转)