【题目】
题目描述:
文翁班上有一个菜鸡 z x y o i zxyoi zxyoi,天天被机房一众大佬吊打。
今天 z x y o i zxyoi zxyoi 终于 AC 了 WOJ1000(A+B)非常激动,但是文翁看他那傻样实在看不下去了,于是出了一道题来考考他。
文翁给了 z x y o i zxyoi zxyoi 两个数列 A,B,他想问 z x y o i zxyoi zxyoi 哪个数列的总乘积更大。
z x y o i zxyoi zxyoi 绞尽脑汁,还是不知道怎么做。。。
z x y o i zxyoi zxyoi:高精度? 文翁:自重。
文翁问得很奇怪,他每次给你 2 2 2 个数字 a i , b i a_i,b_i ai,bi,问现在两个序列的关系
输入格式:
第一行 n n n 表示数列长度( n ≤ 1 0 5 n\le10^5 n≤105)
接下来 n n n 行每行 2 2 2 个整数 a i , b i a_i,b_i ai,bi( 1 ≤ a i , b i ≤ 1 0 9 1\le a_i,b_i\le10^9 1≤ai,bi≤109)
输出格式:
n n n 行,对于每组数,回答已经得到的序列现在的乘积关系
如果 A 序列大输出 ‘A’,B 序列大输出 ‘B’,相等则输出 ‘equal’
样例数据:
输入
5
1 1
2 1
3 1
4 48
5 1
输出
equal
A
A
B
A
【分析】
其实这道题也是道水题啦。
主要思想就是把数取对数后再相加判大小。(根据 log 2 ( x × y ) = log 2 x + log 2 y \log_2(x\times y)=\log_2 x+\log_2y log2(x×y)=log2x+log2y)
然后注意一下精度就行了。
【代码】
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define eps 1e-6
using namespace std;
double sum1=0,sum2=0;
int main()
{
int n,i,x,y;
scanf("%d",&n);
double sum1=0,sum2=0;
for(i=1;i<=n;++i)
{
scanf("%d%d",&x,&y);
sum1+=log2(x),sum2+=log2(y);
if(fabs(sum1-sum2)<eps) puts("equal");
else puts((sum1>sum2)?"A":"B");
}
return 0;
}