• 【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
  • 相关阅读:
    美多商城项目(一)
    Linux安装Qt
    mysql之初体验
    Linux系统编程目录
    Linux 多线程
    进程间通信
    Linux进程
    Linux文件IO(简易)
    Linux常用基本操作
    重绘
  • 原文地址:https://www.cnblogs.com/Tunix/p/4279383.html
Copyright © 2020-2023  润新知