T1
啊……a^b 与 c^d比较大小,我们可以两边取对数,转化成 log(a^b)=b*log(a) 和d*log(c)
这样就能直接算了……然后稍微搞一下精度什么的就A了=。=
//BC #29
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
const double eps=1e-;
int dcmp(double x){
if (fabs(x)<eps) return ; else return x< ? - : ;
}
int main(){
int a,b,c,d;
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF){
double x=b*log(a),y=d*log(c);
int z=dcmp(x-y);
if (z==) puts("=");
else if(z==) puts(">");
else puts("<");
}
return ;
}
T2
很明显是每次找出最大的两个然后加起来……就是fibnacci数列的样子啦~那么就是所有的a[i]加起来,减去最大的两个数的值,再加上fib的前k+1项和。
我们记第二大的数为a,第一大的数为b,则:
fib a b a+b a+2b 2a+3b 3a+5b……
sum a a+b 2a+2b 3a+4b ……………………………………
可以发现,sum[i]=fib[i+2]-b!!所以求sum也就跟求fib一样了,矩阵快速幂搞一搞就可以