牛客刷题 — 【排序】[NOIP2012] 国王的游戏(高精度结构体排序)

1.题面:传送门

2. 思路:

相邻的两个大臣的先后顺序只会互相影响,并不会影响其他人的金币数。

假设前 i-1 个人左手上的数乘积为 s 。

① 若 A 大臣排在B 大臣的前面,则:

s
A_{l}A_{r}
B_{l}B_{r}

此时的金币数最大值为 ans_{1} = max(\frac{s}{Ar}, \frac{s*A_{l}}{B_{r}})

② 若B大臣排在A大臣的前面,则:

s
B_{l}B_{r}
A_{l}A_{r}

此时的金币数最大值为 ans_{2} = max(\frac{s}{B_{r}}, \frac{s*B_{l}}{A_{r}})

因为每个大臣两个手上的整数a,b>=1,所以有 \frac{s}{A_{r}} \leq \frac{s*B_{l}}{A_{r}}, \frac{s}{B_{r}} \leq \frac{s*A_{l}}{B_{r}}

① 若要让ans_{1} \leq ans_{2},即max(\frac{s}{Ar}, \frac{s*A_{l}}{B_{r}}) \leq max(\frac{s}{B_{r}}, \frac{s*B_{l}}{A_{r}}),则还需要满足:\frac{s*A_{l}}{B_{r}} \leq \frac{s*B_{l}}{A_{r}},化简得到:A_{l}*A_{r} \leq B_{l}*B_{r}

② 若要让ans_{2} \leq ans_{1},即max(\frac{s}{B_{r}}, \frac{s*B_{l}}{A_{r}}) \leq max(\frac{s}{Ar}, \frac{s*A_{l}}{B_{r}}),则还需要满足:\frac{s*B_{l}}{A_{r}} \leq \frac{s*A_{l}}{B_{r}},化简得到:B_{l}*B_{r} \leq A_{l}*A_{r}

可以看出,若要取得金币数的最小值min(ans_{1}, ans_{2}),则需要排在前面的大臣左右手两个数的乘积小于等于排在后面的大臣左右手两个数的乘积

最后需要注意下累成会涉及到高精度的运算,这里参考之前学习大数相乘和大数相除。(注意vector是从低精度开始存储的,在比较和输出时注意顺序!)

#include<bits/stdc++.h>
#define endl '\n'
#define null NULL
#define ll long long
#define int long long
#define pii pair<int, int>
#define lowbit(x) (x &(-x))
#define ls(x) x<<1
#define rs(x) (x<<1+1)
#define me(ar) memset(ar, 0, sizeof ar)
#define mem(ar,num) memset(ar, num, sizeof ar)
#define rp(i, n) for(int i = 0, i < n; i ++)
#define rep(i, a, n) for(int i = a; i <= n; i ++)
#define pre(i, n, a) for(int i = n; i >= a; i --)
#define IOS ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);
const int way[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
using namespace std;
const int  inf = 0x7fffffff;
const double PI = acos(-1.0);
const double eps = 1e-6;
const ll   mod = 1e9 + 7;
const int  N = 2e5 + 5;int n, y;
string x;
vector<int> X, A, ans;struct node{int id;int l;int r;int Pr;
}a[N];bool cmp(node x, node y){return x.l*x.r < y.l*y.r;
}vector<int> mul(vector<int> &A, int b)
{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;//去除前导0while(!C.back() && C.size()>1) C.pop_back();return C;
}vector<int> div(vector<int> &A, int b, int &r)
{vector<int> C;r = 0;for(int i = A.size() - 1; i >= 0; i -- ){r = r * 10 + A[i];C.push_back(r / b);r %= b;}reverse(C.begin(), C.end());while(C.size() > 1 && C.back() == 0 ) C.pop_back();//去前导0return C;
}vector<int> Comparison(vector<int> &A, vector<int> &B){if(A.size() > B.size()) return A;if(A.size() < B.size()) return B;for(int i = ans.size()-1; i >= 0; i --){    // 注意:vector存储的高精度都是低位在前,高位在后if(A[i] > B[i]) return A;if(A[i] < B[i]) return B;}return A;
}signed main()
{IOS;cin >> n >> x >> y;for(int i = x.size() - 1; ~i; i --){X.push_back(x[i] - '0');}for(int i = 1; i <= n; i ++){a[i].id = i;cin >> a[i].l >> a[i].r;}sort(a+1, a+n+1, cmp);int r = 0;for(int i = 1; i <= n; i ++){
//        cout << a[i].id << " " << a[i].l << " " << a[i].r << endl;    // debugA = div(X, a[i].r, r);         // 计算前i-1个l乘积除以当前r的金币数
//        for(int j = 0; j < A.size(); j ++){         // debug
//            cout << A[j];
//        }cout << endl;ans = Comparison(A, ans);    // 比较vector(金币数)大小X = mul(X, a[i].l);     // 然后再乘以当前的r得到前i个l的乘积
//        for(int j = 0; j < X.size(); j ++){    // debug
//            cout << X[j];
//        }cout << endl;}for(int i = ans.size()-1; i >= 0 ; i --){    // 注意:从高位开始输出cout << ans[i];}cout << endl;return 0;
}

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

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

相关文章

grpc 和限流Sentinel

基于gRPC的微服务通信模块技术方案书 1. 总体架构设计 #mermaid-svg-TiN9cudEfW5mCWHm {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TiN9cudEfW5mCWHm .error-icon{fill:#552222;}#mermaid-svg-TiN9cudEfW5mCWHm…

经典灰狼算法+编码器+双向长短期记忆神经网络,GWO-Transformer-BiLSTM多变量回归预测,作者:机器学习之心!

经典灰狼算法编码器双向长短期记忆神经网络&#xff0c;GWO-Transformer-BiLSTM多变量回归预测&#xff0c;作者&#xff1a;机器学习之心&#xff01; 目录 经典灰狼算法编码器双向长短期记忆神经网络&#xff0c;GWO-Transformer-BiLSTM多变量回归预测&#xff0c;作者&#…

VGG Image Annotator (VIA):一款免费的数据标注软件介绍与使用

VGG Image Annotator (VIA)&#xff1a;一款免费的数据标注软件介绍与使用 在计算机视觉领域&#xff0c;数据标注是训练机器学习模型的基础步骤之一&#xff0c;而标注工具的选择直接影响标注的效率和准确性。众多标注工具中&#xff0c;VGG Image Annotator (VIA) 是一个开源…

CSS实现百分比水柱图

背景 在echarts没发现有可以直接使用的展示百分比的柱形图,只好自己封装一个组件使用 实现思路 一、图形拆解 要实现的组件是一个 可配置的圆柱形液柱图组件&#xff0c;常用于展示比例进度&#xff0c;比如任务完成度、指标达成率等。把图拆成最小单元然后拼接起来&#x…

详解 rzsz 工具:Windows 与 Linux 文件传输

&#xff08;Linux之软件包管理器&#xff08;CentOS系统&#xff09; —— yum-CSDN博客&#xff09;rzsz工具之前我在这篇文章中介绍过&#xff0c;现在重新详细介绍一下该工具。rzsz 是一个用于在 Windows 和 Linux 系统之间传输文件的工具集&#xff0c;通常通过终端模拟器…

网络编程1(UDP)

网络编程套接字&#xff08;socket api&#xff09; 了解了网络的一些概念&#xff0c;接下来就要进行网络中的跨主机通信&#xff0c;了解网络中的一些API&#xff0c;这里谈到的API都是针对传输层进行的&#xff0c;这是因为我们编写的代码是在应用层&#xff0c;而传输层就…

【电机】定点线性映射

这是一个定点数线性映射的问题&#xff0c;通常用于将浮点型的物理量&#xff08;如速度、位置、扭矩&#xff09;转换为嵌入式系统中使用的整型数据格式&#xff0c;便于通过 CAN 总线或其它通信协议发送给电机控制器。 我们来逐步解析这个过程&#xff0c;并以“速度”为例说…

Spring Cloud 微服务(远程调用与熔断机制深度解析)

&#x1f4cc; 摘要 在微服务架构中&#xff0c;服务之间的远程调用是构建分布式系统的核心环节。然而&#xff0c;随着服务数量的增加和网络复杂度的提升&#xff0c;调用失败、延迟高、异常等问题变得越来越频繁。 为此&#xff0c;Spring Cloud 提供了强大的远程调用组件 …

electron-vite 抽离config.js

1、将config.js 放到resources下的config目录下 module.exports {url: http://192.168.1.17:8000,wsUrl: ws://192.168.1.17:8000, }2、在preload.js 暴露读取API src/preload/index.js(或你的preload入口) const fs require(fs); const path require(path);function getCo…

MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣

引言 作为MySQL的“数据后悔药”和“历史版本档案馆”&#xff0c;Undo Log&#xff08;回滚日志&#xff09;在事务处理和并发控制中扮演着至关重要的角色。今天咱们就从底层原理出发&#xff0c;结合实际场景&#xff0c;把Undo Log的“里里外外”说个明白&#xff01; 一、…

gin如何返回html

✅ 方法一&#xff1a;直接返回 HTML 字符串 这种方式适合简单场景&#xff0c;比如返回一段固定的 HTML 内容。 package mainimport "github.com/gin-gonic/gin"func main() {r : gin.Default()r.GET("/html", func(c *gin.Context) {htmlContent : <…

Insulation score算法解读

Insulation score&#xff08;IS&#xff09;&#xff0c;俗称绝缘分数&#xff0c;用于计算识别三维基因组中的拓扑关联结构域TAD。 首次提出是在&#xff1a; 1&#xff0c;概念 为染色体上的基因组区间分配‘绝缘评分’的方法。该评分用于衡量跨越每个区间的所有相互作用的…

电脑系统重装有什么用?

一、解决系统软件问题 1、修复系统崩溃与错误 系统出现频繁蓝屏、死机、启动失败或程序运行异常&#xff08;如驱动冲突、系统文件损坏&#xff09; 2、清除恶意软件与病毒 电脑中病毒或恶意软件难以通过杀毒软件彻底清除 二、优化系统性能 1、清理冗余文件与设置 长时间…

js随机生成一个颜色

在 JavaScript 中&#xff0c;随机生成颜色有多种方式&#xff0c;以下是最常见的几种实现方法&#xff1a; 方法1&#xff1a;生成随机十六进制颜色&#xff08;如 #FFFFFF&#xff09; 这是最常见的方式&#xff0c;生成格式为 #RRGGBB 的颜色字符串&#xff1a; function…

运维打铁: 服务器防火墙策略配置与管理

文章目录 思维导图一、防火墙基础1. 防火墙概念2. 常见防火墙类型3. 防火墙工作原理 二、策略配置1. 规则制定原则2. 端口与服务开放Linux 系统&#xff08;以 iptables 为例&#xff09;Windows 系统&#xff08;以 Windows 防火墙为例&#xff09; 3. IP 地址过滤允许特定 IP…

locate 命令更新机制详解

文章目录 **一、定时更新的实现载体&#xff1a;crontab 任务****二、定时任务的配置逻辑****三、更新触发的额外机制****四、更新流程的性能优化****五、常见问题与解决方案****总结** 一、定时更新的实现载体&#xff1a;crontab 任务 Linux 系统通常通过 crontab 定时任务 …

docker部署nacos【单机模式使用mysql,使用.env配置】(更新:2025/7/1~)

视频 我的个人视频&#xff0c;有详细步骤 使用docker部署nacos_哔哩哔哩_bilibili 环境 虚拟机&#xff1a;VM&#xff0c;CentOS7 远程连接工具&#xff1a;MobaXterm 使用工具 随机生成字符串&#xff1a; 随机字符串生成器 | 菜鸟工具 Base64编码&#xff1a; B…

如何安全地清除笔式驱动器

您是否正在寻找安全清除笔式驱动器的方法&#xff1f;如果是的话&#xff0c;您可以从本文中得到4个有效的解决方案。无论您准备出售还是捐赠您的笔式驱动器&#xff0c;您都可以轻松清空笔式驱动器。虽然简单的删除似乎就足够了&#xff0c;但残留的数据通常可以恢复。因此&am…

信息新技术

目录 分布式处理基础 一、基础概念 二、通信与网络 三、分布式协调与一致性 四、分布式存储与数据库 五、分布式计算框架 六、容错与高可用 七、负载均衡与调度 八、安全与监控 九、常见分布式系统设计模式 十、典型系统与工具学习 区块链 区块链的核心技术 物联…

创客匠人解析创始人 IP 定位:从专业度到用户心智的占领之道

在知识付费领域&#xff0c;创始人 IP 的定位往往决定了商业变现的天花板。创客匠人通过服务 5 万 知识博主的实践经验&#xff0c;揭示了一个核心逻辑&#xff1a;定位的本质不是简单的标签设定&#xff0c;而是通过持续提升专业度&#xff0c;以实际成果占领用户心智。这一过…