设为首页 加入收藏

TOP

hdu 5170 5171
2015-07-20 17:19:13 来源: 作者: 【 】 浏览:2
Tags:hdu 5170 5171

hdu 5170题意: 给定四个整数 a,b,c,d; 要比较a^b 与c^d的大小,
如果数据小的话直接搞就行,现在数据比较大,可以两边同取对数比较;
但是要注意精度问题!

#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          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 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         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; } 
       
      
     
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[LeetCode]Binary Search Tree It.. 下一篇poj 3630 Phone List trie

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 基础入门视频 (2025-12-26 23:20:22)
·小白入门:MySQL超详 (2025-12-26 23:20:19)
·关于 MySQL 数据库学 (2025-12-26 23:20:16)
·SOLVED: Ubuntu 24.0 (2025-12-26 22:51:53)
·Linux 常用命令最全 (2025-12-26 22:51:50)