链接:https://ac.nowcoder.com/acm/contest/946/A
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld题目描述
筱玛是一个热爱地理的好筱玛。最近,在《地理II》作业本上,筱玛学到了“贝塔指数”的概念:
在经济地理学中,交通的联结度表示交通网络的发达程度,通常用贝塔指数来计算与比较。若用VV表示一个交通网络中结点的数量,用EE表示边的数量,则贝塔指数的计算方式为:β=EVβ=EV。
“实践是检验真理的唯一标准”。作为一个热爱地理的好筱玛,她马上就把新学的知识应用到实践当中去。筱玛一口气出了nn张交通网络规划图,其中第ii张交通网络GiGi有ViVi个结点和EiEi条边。筱玛一眼就看出了哪张图好、哪张图坏。但是作为一个负责任的好筱玛,她必须带领同学们一起进步。因此,她需要你将所有的nn张图按照贝塔指数排序,并求出它们各自的贝塔指数在模109+7109+7意义下的值。
输入描述:
第一行一个整数nn,表示交通网络规划图的数量。
接下来nn行,每行两个整数ViVi和EiEi,分别表示图GiGi中的结点数量和边的数量。
输出描述:
输出共nn行,每行一个数,表示贝塔指数第ii大的交通网络的贝塔指数在模109+7109+7意义下的值。
如果不能整除,输出分数取模后的结果。
示例1
输入
复制
1 1 3
输出
复制
3
说明
显然此时β=EV=3β=EV=3。
备注:
对于100%的数据,保证1≤n≤2×1051≤n≤2×105,1≤Vi,Ei≤1091≤Vi,Ei≤109。
题意:n对数相除 取模,即除法取模,逆元
题解:费马小定理 inv(a) : a^(p-2) = inv(a) (mod p)
知识点:快速幂、逆元、sort cmp函数
#include<bits/stdc++.h> using namespace std; #define mod 1000000007 long long int quick_mi(long long int x,long long int y) { long long int res=1; while(y) { if(y&1) res=res*x%mod;//!!!res取模啊!!! x*=x; x%=mod; y>>=1; } return res; } struct node { long long int v,e; }aa[200005]; bool cmp(node x,node y) { if(x.e*y.v>=y.e*x.v) return true; else return false; } int main() { long long int m; scanf("%lld",&m); for(int i=0;i<m;i++) { int e,v; scanf("%lld%lld",&aa[i].v,&aa[i].e); } sort(aa,aa+m,cmp); for(int i=0;i<m;i++) { printf("%lld\n",aa[i].e*quick_mi(aa[i].v,mod-2)%mod); } }