hdu 5170 5171

hdu 5170题意: 给定四个整数 a,b,c,d; 要比较a^b 与c^d的大小,

如果数据小的话直接搞就行,现在数据比较大,可以两边同取对数比较;

但是要注意精度问题!

#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <algorithm>
#include <cmath>

using namespace std;
int a,b,c,d;

int main()
{
    while(cin>>a>>b>>c>>d)
    {
       double tmp1=b*log10(a*1.0);
       double tmp2=d*log10(c*1.0);

       if(tmp1-tmp2>1e-9)
            printf(">\n");
       else if(tmp2-tmp1>1e-9)
            printf("<\n");
       else
            printf("=\n");
    }
    return 0;
}

hdu 5171 题意: 给定一个集合,里面的数可能会有重复,现在每次可以从中取出两个数a,b,再将a+b加入这个集合中,这个操作可以重复k次

最终集合表述为A={A1,A2,A3…..An};

求sum=A1+A2+A2+A3+……+An的最大值;

贪心处理即可,即每次取出来的都是原来集合中的最大值和次大值,数据小直接模拟即可,现在数据有点大,递推公式:

用a1,b1分别表示原来集合中的最大值,次大值

第一次操作 a1+b1 加入集合

第二次操作 2a1+b1加入集合

第三次操作 3a1+2b1加入集合

第四次擦做 5a1+3b1加入集合

.

.

.

.

.

发现是fib数列,矩阵加速求前k项的和即可;

#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <algorithm>
const int MOD=1e7+7;
using namespace std;
typedef long long ll;
int a[100100];

struct matrix
{
  ll f[5][5];
};
matrix Co; //系数矩阵

matrix mul(matrix a,matrix b)
{
    matrix c;
    memset(c.f,0,sizeof(c.f));
    for(int i=0;i<4;i++)
     for(int j=0;j<4;j++)
      for(int k=0;k<4;k++)
        {
          c.f[i][j]+=(a.f[i][k]*b.f[k][j])%MOD;
          c.f[i][j]%=MOD;
        }
    return c;
}

matrix quick_mod(matrix a,int b)
{
   matrix s;
   memset(s.f,0,sizeof(s.f));
   for(int i=0;i<4;i++)s.f[i][i]=1;
   while(b)
   {
     if(b&1)s=mul(s,a);
     b>>=1;
     a=mul(a,a);
   }
   return s;
}

int main()
{
   int n,k;
   Co.f[0][0]=1,Co.f[0][1]=1,Co.f[0][2]=0;
   Co.f[1][0]=1,Co.f[1][1]=0,Co.f[1][2]=0;
   Co.f[2][0]=1,Co.f[2][1]=1,Co.f[2][2]=1;

   while(cin>>n>>k)
   {
      ll ans=0;
      int a1,b1;
      for(int i=1;i<=n;i++)
      {
        scanf("%d",&a[i]);
        ans=(ans+a[i])%MOD;
      }
      sort(a+1,a+1+n);
      a1=a[n],b1=a[n-1]; //最大值 次大值

      matrix tmp=Co;
             tmp=quick_mod(tmp,k);
      ll left=tmp.f[2][0]*1%MOD+tmp.f[2][1]*0%MOD+tmp.f[2][2]*0%MOD;
         ans=(ans+left*a1%MOD)%MOD;

             tmp=Co;
             tmp=quick_mod(tmp,k-1);
      ll right=tmp.f[2][0]*1%MOD+tmp.f[2][1]*0%MOD+tmp.f[2][2]*0%MOD;
         ans=(ans+(right+1)*b1%MOD)%MOD;
      printf("%I64d\n",ans);
   }
   return 0;
}
时间: 2025-01-02 02:57:50

hdu 5170 5171的相关文章

hdu 5170 GTY&#39;s math problem(水,,数学,,)

题意: 给a,b,c,d. 比较a^b和c^d的大小 思路: 比较log(a^b)和log(c^d)的大小 代码: int a,b,c,d; int main(){ while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF){ double x1 = b*log((double)a); double x2 = d*log((double)c); if(fabs(x1-x2)<eps){ puts("=")

HDU 5170 GTY&#39;s math problem (bsst code #29 1001)

GTY's math problem Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 146    Accepted Submission(s): 80 Problem Description GTY is a GodBull who will get an Au in NOI . To have more time to learn

HDU 5170 GTY&#39;s math problem 精度判断问题

传送门 GTY's math problem Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 568    Accepted Submission(s): 263 Problem Description GTY is a GodBull who will get an Au in NOI . To have more time to l

hdu 5170 精度控制

众所周知,GTY是一位神犇,为了更好的虐场,他从来不写数学作业而是去屠题,他的数学老师非常不爽,但由于GTY每次考试都AK,她也不能说什么,有一天老师在黑板上写了四个数——a,b,c,da,b,c,d 然后让GTY比较a^ba?b??和c^dc?d??的大小,由于GTY不屑于虐这道题,就把这个问题交给你了. 输入描述 多组数据(约5000组),每组数据包含4个整数a,b,c,d(1 \leq a,b,c,d \leq 1000)a,b,c,d(1≤a,b,c,d≤1000),用空格隔开 输出描述

立即执行函数(IIFE)的理解与运用

作为JavaScript的常用语法,立即执行函数IIFE(Immediately-Invoked Function Expression)是值得我们认真去学习探究的. 一.创建函数的两种方式 我们先从基础讲起,要创建一个JS函数,有两种方式. (一)函数定义(Function Declaration) function Identifier ( Parameters ){ FunctionBody } 函数定义中,参数(Parameters)标识符(Identifier )是必不可少的.如果遗漏

JS中URL编码参数(UrlEncode)

网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数.参数parameter由于用类似URL的形式传过去 , 所以别直接就那样赋值以下是对变量值的URL编码总结 : 意见用encodeURIComponent() , GET 和POST方法都能够发送过去Java编程script中存在几种对URL字符串停止编码的窍门:escape(),encodeURI(),以及encodeURIComponent().这几种编码所起的功能各不相同.e

JS base64 加密和 后台 base64解密(防止中文乱码)

直接上代码 1,js(2个文件,网上找的)  不要觉的长,直接复制下来就OK //UnicodeAnsi.js文件 //把Unicode转成Ansi和把Ansi转换成Unicode function UnicodeChr() { return '00A4,00A7,00A8,00B0,00B1,00B7,00D7,00E0,00E1,00E8,00E9,00EA,00EC,00ED,00F2,00F3,00F7,00F9,00FA,00FC,0101,0113,011B,012B,014D,01

10000以内unicode对照表

0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8   9   10   11   12   13 . 14 . 15 . 16 . 17 . 18 . 19 . 20 . 21 . 22 . 23 . 24 . 25 . 26 . 27 . 28 . 29 . 30 . 31   32 ! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43 , 44 - 45 . 46 / 47 0 48 1 49 2 50 3 5

Html5模拟通讯录人员排序(sen.js)

// JavaScript Document var PY_Json_Str = ""; var PY_Str_1 = ""; var PY_Str_2 = "";  var PY_Str_3 = "";  var PY_Str_4 = ""; var PY_Str_5 = ""; var PY_Str_6 = "";  var PY_Str_7 = "&q