P1080 [NOIP2012 提高组] 国王游戏 贪心

[NOIP2012 提高组] 国王游戏

传送门

题目描述

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

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

输入格式

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

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

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

输出格式

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

样例 #1

样例输入 #1

3 
1 1 
2 3 
7 4 
4 6

样例输出 #1

2

提示

【输入输出样例说明】

1 1 1 2 2 2 3 3 3 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2 2 2

1 1 1 3 3 3 2 2 2 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2 2 2

2 2 2 1 1 1 3 3 3 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2 2 2

2 2 2 3 3 3 1 1 1这样排列队伍,获得奖赏最多的大臣所获得金币数为 9 9 9

3 3 3 1 1 1 2 2 2这样排列队伍,获得奖赏最多的大臣所获得金币数为 2 2 2

3 3 3 2 2 2 1 1 1 这样排列队伍,获得奖赏最多的大臣所获得金币数为 9 9 9

因此,奖赏最多的大臣最少获得 2 2 2 个金币,答案输出 2 2 2

【数据范围】

对于 20 % 20\% 20% 的数据,有 1 ≤ n ≤ 10 , 0 < a , b < 8 1≤ n≤ 10,0 < a,b < 8 1n10,0<a,b<8

对于 40 % 40\% 40% 的数据,有 1 ≤ n ≤ 20 , 0 < a , b < 8 1≤ n≤20,0 < a,b < 8 1n20,0<a,b<8

对于 60 % 60\% 60% 的数据,有 1 ≤ n ≤ 100 1≤ n≤100 1n100

对于 60 % 60\% 60% 的数据,保证答案不超过 1 0 9 10^9 109

对于 100 % 100\% 100% 的数据,有 1 ≤ n ≤ 1 , 000 , 0 < a , b < 10000 1 ≤ n ≤1,000,0 < a,b < 10000 1n1,000,0<a,b<10000

NOIP 2012 提高组 第一天 第二题

解题思路

  • 考虑对一合法大臣排列,交换i与j(i<j)的位置,就能获得更优解
  • A i A_i Ai= a 1 ⋅ a 2 ⋅ … ⋅ a i a_1·a_2·…·a_i a1a2ai
  • 交换前 A n s 1 = M a x ( A i − 1 / b i , A j − 1 / b j ) Ans1=Max(A_{i-1}/b_i,A_{j-1}/b_j) Ans1=Max(Ai1/bi,Aj1/bj)
  • 交换后 A n s 2 = M a x ( A i − 1 / b j , A j − 1 ∗ a j / a i / b i ) Ans2=Max(A_{i-1}/b_j,A_{j-1}*a_j/a_i/b_i) Ans2=Max(Ai1/bj,Aj1aj/ai/bi)
  • 需满足 A n s 1 > A n s 2 Ans1>Ans2 Ans1>Ans2才需交换
    A i − 1 / b i < A j − 1 ∗ a j / a i / b i A_{i-1}/b_i < A_{j-1}*a_j/a_i/b_i Ai1/bi<Aj1aj/ai/bi A j − 1 / b j > A i − 1 / b j A_{j-1}/b_j > A_{i-1}/b_j Aj1/bj>Ai1/bj,可知,若等式成立,则
    • 必然满足 A j − 1 / b j > A j − 1 ∗ a j / a i / b i A_{j-1}/b_j > A_{j-1}*a_j/a_i/b_i Aj1/bj>Aj1aj/ai/bi
    • a i ⋅ b i > a j ⋅ b j a_i·b_i>a_j·b_j aibi>ajbj
    • 以此排序即可获得最优排列顺序

(什么证完了?还不懂?戳我)

#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1000 + 5;
int n, A, B;
struct project {int a, b;
} hands[Maxn];
int sum[Maxn], tmp[Maxn], p[Maxn], len2, len1, m, P;
inline bool cmp(project A, project B) {if (A.a * A.b == B.a * B.b) {return A.b < B.b;}return A.a * A.b < B.a * B.b;
}
inline bool Max() {int i, j;i = j = 1;while (p[i] == 0 && i <= len2) {i++;}while (tmp[j] == 0 && j <= len1) {j++;}if (len2 - i + 1 > len1 - j + 1) {return 0;}if (len2 - i + 1 < len1 - j + 1) {return 1;}while (i <= len2 && j <= len1) {if (p[i] < tmp[j]) {return 1;}if (p[i] > tmp[j]) {return 0;}i++;j++;}return 0;
}
inline void mul(int d) {for (int i = 1; i <= m; i++) {sum[i] *= hands[d].a;}for (int i = 1; i <= m; i++) {sum[i + 1] += sum[i] / 10000;sum[i] %= 10000;}if (sum[m + 1] != 0) {m++;}
}
inline void div(int d) {memset(tmp, 0, sizeof(tmp));len1 = 1;while (m > 0 && sum[m] == 0) {m--;}P = 0;bool flag = 0;for (int i = m; i >= 1; i--) {P = P * 10000 + sum[i];tmp[++len1] = P / hands[d].b;if (tmp[len1] == 0 && !flag) {len1--;} else {flag = 1;}P %= hands[d].b;}
}
inline void work() {cin >> n >> A >> B;for (int i = 1; i <= n; i++) {cin >> hands[i].a >> hands[i].b;}sort(hands + 1, hands + n + 1, cmp);m = 1;sum[1] = A;for (int i = 1; i <= n; i++) {div(i);if (Max()) {len2 = len1;memcpy(p, tmp, sizeof(tmp));}mul(i);}int i = 0;while (i <= len2 && p[i] == 0) {i++;}cout << p[i];i++;for (; i <= len2; i++) {if (0 <= p[i] && p[i] <= 9) {cout << "000" << p[i];} else if (10 <= p[i] && p[i] <= 99) {cout << "00" << p[i];} else if (100 <= p[i] && p[i] <= 999) {cout << "0" << p[i];} else {cout << p[i];}}
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);work();return 0;
}

想要提升实力?看这里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C. Partitioning the Array - 思维 + gcd

题面 分析 如果让两个数满足对某一个数取模后相等&#xff0c;那么也就是 x m o d m y m o d m x mod m y mod m xmodmymodm&#xff0c;那么也就是 ( x − y ) m o d m 0 m o d m (x - y) mod m 0 mod m (x−y)modm0modm&#xff0c;因此可以推出&#xff0c;对于每一个…

day16 二叉树的最大深度 n叉树的最大深度 二叉树的最小深度 完全二叉树的节点数

题目1&#xff1a;104 二叉树的最大深度 题目链接&#xff1a;104 二叉树的最大深度 题意 二叉树的根节点是root&#xff0c;返回其最大深度&#xff08;从根节点到最远叶子节点的最长路径上的节点数&#xff09; 递归 根节点的的高度就是二叉树的最大深度 所以使用后序遍…

系列六、Spring Security中的认证 授权 角色继承

一、Spring Security中的认证 & 授权 & 角色继承 1.1、概述 关于Spring Security中的授权&#xff0c;请参考【系列一、认证 & 授权】&#xff0c;这里不再赘述。 1.2、资源类 /*** Author : 一叶浮萍归大海* Date: 2024/1/11 20:58* Description: 测试资源*/ Re…

思科模拟器中环境条件设置第一步

一直设想若上图中的温度在不同房间显示和物理环境一样的结果。 于是乎看了 经过实验 原因是 在模拟器的physcial中设置就可以实现不同的温度。 接下来就是合理使用了&#xff01; 对类似实验感兴趣的同学&#xff0c;一起加入尝试&#xff1a;微信号imaguofeng 2024年1月14…

Matlab 一种基于机载LiDAR点云电力线自动提取方法之二

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前的方法在面对地面为水面时,由于地面点的缺失会导致电力线提取错误,因此这里使用CSF地面点滤波改进电力线的提取过程。关于CSF滤波的相关配置可以详看:Matlab CSF地面点滤波(插件),改进之后的代码如下所示…

自定义call/apply/bind函数

这里&#xff0c;我们使用原型方法给 Function 对象添加了 myCall、myApply 和 myBind 方法。 myCall 和 myApply 非常相似&#xff0c;它们的不同之处在于参数传递方式。 myCall 函数使用剩余参数语法 ...args 来传递参数&#xff0c;而 myApply 函数接受一个数组作为参数。…

maven的scop作用域依赖问题导致idea社区版报错

1. 错误&#xff1a;代码没改&#xff0c;卸了专业版后改用社区版出现以下报错 2024-01-08 16:34:29.374 ERROR [main] org.springframework.boot.SpringApplication.reportFailure:823 Application run failed java.lang.IllegalStateException: Error processing condition …

计算机找不到vcomp140.dll怎样修复?马上教会你修复dll问题

在计算机系统运行过程中&#xff0c;遭遇“vcomp140.dll丢失”的场景并不少见&#xff0c;这一问题的出现往往伴随着软件无法正常启动、运行时错误提示或者系统性能下降等现象。具体场景可能包括但不限于&#xff1a;用户在尝试打开某个依赖于Visual C Redistributable库的应用…

数据在AI图像修复任务中的核心作用

在人工智能&#xff08;AI&#xff09;领域&#xff0c;数据的重要性不言而喻。尤其在图像修复任务中&#xff0c;数据的精度和质量直接影响着AI模型的性能。图像修复是指利用AI技术自动识别图像中的缺陷或遮挡物&#xff0c;并对其进行修复或还原的过程。这项技术广泛应用于各…

基于pyradiomics影像组学特征提取

基于pyradiomics影像组学特征提取 特征提取&#xff1a;1 pyradiomics的使用&#xff1a;1.1&#xff0c;在python环境下安装pyradiomics:1.2,设置特征提取器&#xff0c;获得想要特征&#xff1a;1.2.1 图像类型1.2.2 目标特征设置1.2.3 特征提取器设置 2 代码示例;参考&#…

【web服务搭建实验】之nginx基础学习

目录 一、nginx的简介二、nginx安装实验虚拟主机的配置web服务器的主流实现方式-LAMP和LNMP 一、nginx的简介 Nginx是一款轻量级HTTP服务器&#xff0c;同时也是代理邮箱服务器&#xff0c;具备反向代理&#xff0c;通用代理的功能。支持多个系统&#xff0c;和不同操作系统。…

秒杀系统如何设计

秒杀系统主要有以下特点 1、高并发瞬时流量 2、热点数据 3、数据量大 4、库存的正确扣减 5、黄牛抢购 6、重复下单 7、对普通交易的影响 前后端缓存 首先是秒杀功能的开启&#xff0c;以及前端资源的访问&#xff0c;这部分内容一般都是提前放到CDN中&#xff0c;让这些静态…

图机器学习年度汇集

一、深度学习模型优化 在图机器学习领域&#xff0c;深度学习模型的优化尤为重要。今年的主要进展包括了利用先进的优化算法提高模型精度、减少训练时间以及对大规模图数据的适应性。部分团队还推出了定制化的深度学习模型&#xff0c;特别适用于复杂的图形结构和交互。 二、…

【算法】Java-二叉树的右视图(BFS、DFS两种解法)

题目要求&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入…

e2studio开发三轴加速度计LIS2DW12(3)----检测活动和静止状态

e2studio开发三轴加速度计LIS2DW12.3--检测活动和静止状态 概述视频教学样品申请源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()…

Jetpack Compose -> 声明式UI Modifier

前言 本章主要介绍下 Compose 的声明式 UI 以及初级写法&#xff1b; 什么是声明式UI 传统UI 传统 UI 方式来声明UI <androidx.appcompat.widget.LinearLayoutCompat android:layout_width"match_parent" android:layout_height"match_parent&quo…

Pytorch中的标准维度顺序

在PyTorch中&#xff0c;如果一个张量包括通道数&#xff08;C&#xff09;、宽度&#xff08;W&#xff09;、高度&#xff08;H&#xff09;和批量大小&#xff08;N&#xff09;&#xff0c;那么它的标准维度顺序是 [N, C, H, W]&#xff0c;即&#xff1a; 第一个维度 N 是…

test Property-based Testing-04-junit-quickcheck

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) junit-quickcheck&#xff1a;基于 JUnit 风格的属性驱动测试库 junit-qu…

送水小程序开发:如何选择最适合的技术平台

选择最适合的技术平台对于开发送水小程序至关重要。在这篇文章中&#xff0c;我将为您介绍如何选择最适合的技术平台来开发送水小程序&#xff0c;以及各种技术平台的优缺点。无论您是刚刚起步的创业公司还是成熟的送水服务提供商&#xff0c;本文都将为您提供有关送水小程序开…

深信服超融合HCI版本升级,6.0.0R5升级至6.8.0R2

超融合升级&#xff0c;需要满足以下条件及前期准备&#xff1a; 确认HCI的升级序列号有效升级时长大概在一个半小时&#xff0c;安全起见&#xff0c;需预留至少三至四小时窗口期升级前&#xff0c;需要将所有虚拟机关机&#xff0c;涉及到业务无法访问&#xff0c;需提前通知…