两个分数比较大小

解决问题:

对于分子和分母的数据范围过大

导致化成小数进行比较大小的时候

存在精度丢失,不能比较的情况

为此进行算式变形推出

 

 故采用如下自定义函数:

ll bj(ll fz1,ll fm1,ll fz2,ll fm2){//分母相等if(fm1 == fm2){return fz1-fz2;}//分母不相等,公式变换ll tFZ1 = fz1*fm2;ll tFZ2 = fz2*fm1;return tFZ1-tFZ2;
}

题目示例:

解决代码:

#include<iostream> 
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int, int> pii;
typedef pair<db, db> pdd;const int N=2e5+6;struct node{int id;ll a,b;db win;
}arr[N];ll bj(ll fz1,ll fm1,ll fz2,ll fm2){//分母相等if(fm1 == fm2){return fz1-fz2;}//分母不相等--进行通分ll tFZ1 = fz1*fm2;ll tFZ2 = fz2*fm1;return tFZ1-tFZ2;
}bool cmp(node x,node y){if(bj(x.a,x.a+x.b,y.a,y.a+y.b)==0){return x.id<y.id;}return bj(x.a,x.a+x.b,y.a,y.a+y.b)>0?1:0;
}int main(){int n;cin>>n;db a,b;for(int i=1;i<=n;i++){arr[i].id=i;scanf("%lld%lld",&arr[i].a,&arr[i].b);db a=arr[i].a,b=arr[i].b;arr[i].win=a/(a+b);}sort(arr+1,arr+1+n,cmp);for(int i=1;i<=n;i++){printf("%d ",arr[i].id);}cout<<endl;return 0;
} 

 

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

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

相关文章

GPT(Generative Pre-Training)论文解读及实现(一)

1 GPT Framework 1.1 Unsupervised pre-training Given an unsupervised corpus of tokens U {u1, . . . , un}, we use a standard language modeling objective to maximize the following likelihood: 在给定语料上下文环境下&#xff0c;目标时最大化下面的语言模型&…

3d Max中的Arnold渲染为黑色,这样处理!

使用Arnold渲染视图(ARV)时&#xff0c;图像保持黑色。 快照功能和常规3ds Max渲染设置可按预期生成图像。 解决方案&#xff1a; 解决方案可能需要执行下面的一项或多项操作&#xff1a; 添加光源 检查场景文件是否包含光源。如果场景中没有光源&#xff0c;渲染结果为黑色…

vue中使用v-for实现两次嵌套循环,判断某子元素是否显示,进行复杂表单校验

一、需求场景&#xff1a; 有以下一个使用场景&#xff0c;名称111、名称222、名称333&#xff0c;是放在一个大数组里的&#xff0c;然后通过第一层for循环显示出来的。名称333数组里又包含自己的子数组&#xff0c;子数组再通过第二次for循环展示出来。当我们选择发放方式的…

Linux(驱动编程)(调试技术)(imx6ull)

调试技术 1、在写驱动程序时函数未包含头文件 在linux内核源码driver/char目录下输入命令 grep “XXXX” * -nrw查看次函数在那个.c里用过&#xff0c;然后在vscode界面下按altp搜索这个.c就可以参考这个.c的头文件。 2、编译完驱动跟应用后先 insmod xxx.ko //插入 cat /…

4.9 x64dbg 内存处理与差异对比

LyScript 插件中针对内存读写函数的封装功能并不多&#xff0c;只提供了最基本的内存读取和内存写入系列函数的封装&#xff0c;本章将继续对API接口进行封装&#xff0c;实现一些在软件逆向分析中非常实用的功能&#xff0c;例如ShellCode代码写出与置入&#xff0c;内存交换&…

Nativefier 将网站打包成桌面程序

Nativefier是一个命令行工具&#xff0c;仅仅通过一行代码就可以轻松地为任何的网站创建桌面应用程序 1 Mac 电脑 安装Nativefier 打开终端 npm install nativefier -g2 创建一个桌面应用程序&#xff1a; nativefier "https://biglead.blog.csdn.net/article/details…

Pytorch基本使用—激活函数

✨1 介绍 ⛄ 1.1 概念 激活函数是神经网络中的一种数学函数&#xff0c;它被应用于神经元的输出&#xff0c;以决定神经元是否应该被激活并传递信号给下一层。常见的激活函数包括Sigmoid函数、ReLU函数、Tanh函数等。 &#x1f384; 1.2 性质 激活函数是神经网络中的一种重…

RFID系统的部署流程和关键环节

RFID系统的部署与集成对于实现高效的物流管理、提升运营效益和实现自动化过程至关重要。本文将为您解释RFID系统的部署流程和关键环节&#xff0c;并探讨RFID系统与现有IT基础设施的集成方式。我们还将提供RFID系统部署和集成中常见问题的解决方案&#xff0c;帮助您制定RFID系…

ELK日志分析系统

目录 开始 第一台安装elasticsearch-head插件 第一台node1安装logstash 配置收集系统日志 第一台 安装kibana第一台 第三台 简述&#xff1a; 日志分析是运维工程师解决系统故障&#xff0c;发现问题的主要手段。日志主要包括系统日志、应用程序日志和安全日志。系统运…

cesium 实现多颗卫星与多颗地面站雷达通信效果

最主要的部分是计算空间内两点之间的距离以及卫星对地点是否在雷达扫描范围内 先看效果 1.计算空间内两点之间的距离 //计算距离 function distance(point1, point2) {var point1cartographic = Cesium.Cartographic.fromCartesian(point1);var</

基于STM32智能窗帘控制系统仿真设计(含源程序+proteus仿真+讲解视频)

# 基于STM32智能窗帘设计&#xff08;含源程序proteus仿真&#xff09; 仿真&#xff1a;proteus8.11 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 编号C0007 资料下载链接 讲解视频 基于STM32的简易智能窗帘控制系统仿真设计 功能说明&#xff1a; 实现功能&a…

Kubernetes:快速入门指南

原文作者&#xff1a;NGINX 原文链接&#xff1a;Kubernetes&#xff1a;快速入门指南 转载来源&#xff1a;NGINX 官方网站 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 什么是 Kubernetes&#xff1f; Kubernetes又称为 k8s&#xff0c;是一个开源平台&#xff…