牛客练习赛49

A题
链接:https://ac.nowcoder.com/acm/contest/946/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
题目描述
筱玛是一个热爱地理的好筱玛。最近,在《地理II》作业本上,筱玛学到了“贝塔指数”的概念:

在这里插入图片描述
在这里插入图片描述

#include<bits/stdc++.h>
#define 64 long long//不管32位还是64位的,int都是4个字节,一个字节8位,即32位 
                     //long long 都是8个字节,那么就是64位,这句话的作用就是将原来的int_32 型 改成int_64型,
					 //在一些预编译里面还会出现 #define _int64 long long的语句,c99标准之后,64位的int都用long long 
					 //来表示,这里可以理解为处理标准兼容的问题。 
#define N 500005
 
using namespace std;
 
const int Mod=1e9+7;//科学计数法 
struct node{int x, y;}a[N];//定义结构体的同时,定义大小为N的结构体数组。 
inline bool cmp(node aa,node bb){return aa.y*bb.x>aa.x*bb.y;}//避免精度问题。 
 
inline int ksm(int x,int y){//求模运算,这里是快速求模运算。 
                            //VS 2017虽然把__int64作为了一种内置类型,但是也做了类似的处理,使得__int64与long long没有肉眼可见的差别。
        int ans1=1;
	    while (y){
        if (y&1) //逐位与运算,通过和1相与,保留最后一位 
		  ans1=1ll*ans1*x%Mod;//通过乘以1ll,将等号右边的精度提高到long long ,低精度向高精度转化,避免中间结果溢出范围,右边的ans现在是64位的int
		                     //原来32位的int型 10位数字,long long 19位数字, 1e+9是9位数字, 所以是32位还是64位都不会超出范围。 
          y>>=1;//右移相当除以2,类比十进数,右移一位相当于除以10,同理左移,是乘以相应的进制基数。 
		  x=1ll*x*x%Mod;//x中记录每次翻倍的求模的结果。 
        }
	   return ans1;
}
signed main(){
    int n;
    
	scanf("%lld",&n);
    for (int i=1;i<=n;i++) 
	scanf("%lld%lld",&a[i].x,&a[i].y);//注意结构体的输入方式。 
    sort(a+1,a+n+1,cmp);//i=1开始,所以起始位置为a+1 
    for (int i=1;i<=n;i++) 
	printf("%lld\n",a[i].y*ksm(a[i].x,Mod-2)%Mod);//分数求模的定理转换。 
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值