【BestCoder】【Round#29】

T1

  啊……a^b 与 c^d比较大小,我们可以两边取对数,转化成 log(a^b)=b*log(a) 和d*log(c)

  这样就能直接算了……然后稍微搞一下精度什么的就A了=。=

 1 //BC #29
 2 #include<cmath>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<iostream>
 7 #include<algorithm>
 8 #define rep(i,n) for(int i=0;i<n;++i)
 9 #define F(i,j,n) for(int i=j;i<=n;++i)
10 #define D(i,j,n) for(int i=j;i>=n;--i)
11 using namespace std;
12 const double eps=1e-10;
13 int dcmp(double x){
14     if (fabs(x)<eps) return 0; else return x<0 ? -1 : 1;
15 }
16 int main(){
17     int a,b,c,d;
18     while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF){
19         double x=b*log(a),y=d*log(c);
20         int z=dcmp(x-y);
21         if (z==0) puts("=");
22         else if(z==1) puts(">");
23         else puts("<");
24     }
25     return 0;
26 }
View Code

 

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一样了,矩阵快速幂搞一搞就可以

View Code

 

posted @ 2015-02-07 22:13  Tunix  阅读(172)  评论(0编辑  收藏  举报