题目描述

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。

首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。

然后,让这 n 位大臣排成一排,国王站在队伍的最前面。

排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:

排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

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

注意,国王的位置始终在队伍的最前面。

输入格式

第一行包含一个整数 n,表示大臣的人数。
第二行包含两个整数 a 和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。
接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出格式

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

数据范围

1≤n≤1000
0<a,b<10000

输入样例:

3
1 1
2 3
7 4
4 6

输出样例:

2

题解:首先用贪心的思想先排序,排序的规律为a.x * a.y < b.x * b.y, 这个结果可以证出来,我就不多描述了, 其次是这道题给出的数非常的大,很明显要用高精度来做。

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct p{int x, y;
}a[1010];
bool cmp(p a, p b)
{return a.x * a.y < b.x * b.y;
}
vector<int> mul(vector<int> a, int b) //高精度乘法
{reverse(a.begin(), a.end());vector<int> c;int t = 0;for(int i = 0; i < a.size(); i++){t += a[i] * b;c.push_back(t % 10);t /= 10;}while(t){c.push_back(t % 10);t /= 10;}reverse(c.begin(), c.end());return c;
}
vector<int> div(vector<int> a, int b)  //高精度除法
{vector<int> c;bool flag = false;int t = 0;for(int i = 0; i < a.size(); i++){t = t * 10 + a[i];int x = t / b;if(x || flag){flag = true;c.push_back(x);}t %= b;}return c;
}
vector<int> max_vec(vector<int> a, vector<int> b)  //比较大小
{ if(a.size() != b.size())return a.size() > b.size() ? a : b;elsereturn a > b ? a : b;
}
void output(vector<int > a) //输出
{for(int i = 0; i < a.size(); i++)cout << a[i];cout << endl;
}
int main()
{int n;cin >> n;for(int i = 0; i <= n; i++)cin >> a[i].x >> a[i].y;sort(a + 1, a + n + 1, cmp);vector<int> ans, now;now.push_back(1);for(int i = 1; i <= n; i++){now = mul(now, a[i - 1].x);ans = max_vec(ans, div(now, a[i].y));}output(ans);return 0;
}

国王游戏(贪心 + 高精度乘法 + 高精度除法 + 高精度比较大小)相关推荐

  1. 洛谷P1080 国王游戏 贪心+高精度

    https://www.luogu.org/problem/P1080 题目描述 恰逢 HH H国国庆,国王邀请n nn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王 ...

  2. 高精度加法 高精度减法 高度除法 高精度乘法 方法总结

    一.引言 对于数字的储存,用实数类型总会有一些不足,比如: 使用int 只能最多存储4个字节,范围也就是2的32次方: 使用double 只能最多储存8字节,就是2的64次方: 如果数字超过这个限制, ...

  3. P1080 国王游戏(贪心+高精度乘除及大数比较)

    https://www.luogu.org/problemnew/show/P1080 题目描述 恰逢 H 国国庆,国王邀请 n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数 ...

  4. CH - 0701 国王游戏(贪心+高精度运算)

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

  5. 在计算机语言中的乘法,LOGO语言编程题  高精度乘法★★

    不限制位数的整数高精度乘法★★★★ 这是"高精度算法"系列文章中的第二篇.在"高精度加.减.乘.除"这4种计算中,加法最基础.最简单,乘法稍难,减法更难,除法最 ...

  6. c++高精度乘法(大数乘法)

    高精度乘法 对于计算机无法用普通数据类型(如:longint)表示的大整数进行乘法运算,称为高精度乘法. 步骤 高精度乘法主要包括以下几个要求及过程 1.为了获取输入数字的每一位的值,包括个位,十位等 ...

  7. 高精度乘法的介绍以及模板的分享

    今天我们来讲讲高精度乘法 什么是高精度乘法呢? 我们来看看百度百科什么介绍高精度乘法的,同样是因为存储数据的问题,大整数的乘法必定会有溢出的时候,那么我们应该怎么计算呢 其实乘法的计算也不难,我们这里 ...

  8. C语言实现高精度乘法

    大一小白尝试C语言高精度乘法 一.高精度乘法是什么 高精度乘法就是对于普通数据类型无法表示的大整数进行乘法运算. 二.为什么需要高精度乘法 在C语言中,常用的数据类型有int, long long, ...

  9. 国王游戏(贪心算法+高精度运算)

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

最新文章

  1. 【计算机组成原理】定点运算器的基本结构
  2. 单词短语搭配用法网站
  3. 栈溢出笔记1.9 认识SEH
  4. python的精髓_教你玩转Python!一文总结Python入门到精髓的窍门
  5. 编程模式(schema) —— 表驱动法(table-driven)
  6. 二进制空间权重矩阵_空间权重矩阵的生成方法分析与实验
  7. xp安装python3.4_32位XP系统 Python3.4.4安装scrapy1.6.0
  8. 最小可分辨温差四杆靶空间频率选择
  9. CSR蓝牙芯片进测试模式方法
  10. 远程连接桌面计算机的凭据,凭据的远程桌面连接 - Windows Server | Microsoft Docs
  11. 三点共线,向量计算其中一点坐标
  12. GIF、SVG、PNG、图片格式转换
  13. Linux文件禁止删除修改,Linux文件保护禁止修改、删除、移动文件等,使用chattr +i保护...
  14. android系统构建系统_构建系统简介
  15. 帮我写一个无数爱心滑落的html
  16. MySQL无效的月份_ORACLE 插入时间时显示'无效的月份'的问题
  17. 搞线上渠道推广实操这么些年了
  18. 推荐几个学习linux的国外著名论坛网站
  19. 2016年国内开源镜像站点汇总
  20. NLP:文本情感分析快速入门

热门文章

  1. 【学习笔记】OSG 基本几何图元
  2. linux 嵌入式串口通信,基于linux的嵌入式串口通信综述.doc
  3. java项目打war包
  4. Centos7下搭建FastDFS+Nginx
  5. C-Lodop的https扩展版,火狐下添加例外
  6. getFullYear 方法
  7. [已解决问题] Could not find class XXX referenced from method XXX.YYY
  8. 【Java从0到架构师】Spring - AOP
  9. 【恋上数据结构】图基础知识介绍
  10. 数据结构与算法学习笔记02-双向链表