HDU 5171
这道题本来很水,以前做过一样的,斐波那契数列,用矩阵快速幂的方法求,本来很水,以前做过很多次,为毛做的时候没想到T_T
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define LL __int64
using namespace std; const LL MOD=10000007;
int a[100005]; struct Matrix{
LL p[2][2];
};
Matrix per,s; LL tmp[2]; Matrix operator *(Matrix a,Matrix b){
Matrix c;
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
c.p[i][j]=0;
for(int k=0;k<2;k++)
c.p[i][j]=(c.p[i][j]+a.p[i][k]*b.p[k][j])%MOD;
}
}
return c;
} Matrix cal_quick(int k){
Matrix ans=per,p=s;
while(k){
if(k&1)
ans=ans*p;
k>>=1;
p=p*p;
}
return ans;
} int main(){
per.p[0][0]=per.p[1][1]=1;
per.p[0][1]=per.p[1][0]=0;
s.p[0][0]=s.p[0][1]=s.p[1][0]=1;
s.p[1][1]=0;
int n,k;
LL first,second,pos;
LL ans;
while(scanf("%d%d",&n,&k)!=EOF){
ans=0; first=second=pos=-1;
for(int i=0;i<n;i++){
scanf("%I64d",&a[i]);
ans=(ans+a[i])%MOD;
if(a[i]>first){
first=a[i]; pos=i;
}
}
ans-=first;
for(int i=0;i<n;i++){
if(pos!=i&&second<a[i])
second=a[i];
}
tmp[0]=1;tmp[1]=0;
Matrix one=cal_quick(k+1);
LL ans_a=(one.p[0][0]*tmp[0]+one.p[0][1]*tmp[1])%MOD;
ans=((ans+((ans_a-1)*second)%MOD)%MOD+MOD)%MOD;
one=one*s;
ans_a=(one.p[0][0]*tmp[0]+one.p[0][1]*tmp[1])%MOD;
ans=((ans+((ans_a-1)*first)%MOD)%MOD+MOD)%MOD;
printf("%I64d\n",ans);
}
return 0;
}
HDU 5171的更多相关文章
- HDU 5171 GTY's birthday gift 矩阵快速幂
GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- hdu 5171(矩阵快速幂,递推)
GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- hdu 5171 GTY's birthday gift
GTY's birthday gift 问题描述 GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次 ...
- hdu 5171 GTY's birthday gift(数学,矩阵快速幂)
题意: 开始时集合中有n个数. 现在要进行k次操作. 每次操作:从集合中挑最大的两个数a,b进行相加,得到的数添加进集合中. 以此反复k次. 问最后集合中所有数的和是多少. (2≤n≤100000,1 ...
- hdu 1869 六度分离(最短路floyd)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 六度分离 Time Limit: 5000/1000 MS (Java/Others) M ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- laravel接口设计
在各种公共方法都设计好,软件安装成功的条件下 routes/web.php中路由信息如下 <?php /* |------------------------------------------ ...
- redis集群部署及常用的操作命令_01
简单说下自己测试搭建简单的redis集群的大体步骤: 1.首先你的有6个redis(官方说最少6个,3master,3slave),可以先在一台机器上搭建,搭建到多台上应该只需要改变启动命令即可(可能 ...
- Hdu-6230 2017CCPC-哈尔滨站 A.Palindrome Manacher 主席树
题面 题意:给你一个字符串,问你满足s[i]=s[2n-i]=s[2n+i-2]的子串(这子串长度为3n-2)有多少个,原字符串长度<=5e5 题解:对于这种子串,其实要满足2个回文,跑过一次M ...
- js与jquery基础知识对比(一)---2017-05-06
用表格做的,想要对比的内容一目了然,红色部分为重点 js jquery 取元素 id: document.getElementById("aa"); 取到的是dom对象 cla ...
- mysql的递归(使用函数)
getChildList: BEGIN #声明两个局部变量 ); ); #初始化局部变量 SET sTemp = ''; #调用cast函数将int转换为char SET sTempChd = roo ...
- Solr.NET快速入门(八)【多核多实例,映射验证】
多核/多实例 本页介绍如何配置SolrNet访问(读/写)多个Solr内核或实例. 它假定您知道Solr内核是什么,如何在SolrNet外部配置和使用它们. 此页面不涵盖CoreAdminHandle ...
- gitlab quickly install
一.安装gitlab依赖环境 yum -y install vim wget epel-release yum install curl policycoreutils openssh-server ...
- 介绍一个简单的Parser
我们已经学习了怎样创建一个简单的Monad, MaybeMonad, 并且知道了它如何通过在 Bind函数里封装处理空值的逻辑来移除样板式代码. 正如之前所说的,我们可以在Bind函数中封装更复杂的逻 ...
- c++中的强制转换
一.C语言的强制转换1.1 隐性转换 不同数据类型之间赋值和运算,函数调用传递参数等等,由编译器完成 int nTmp = 10; short sTmp ...
- jQuery基本选择器模块(二)
选择器模块 1.push方法的兼容性(了解) 问题:IE8不支持aplly方法中的第二个参数是 伪数组 目标:实现 push 方法的浏览器兼容性问题 var push = [].push; try { ...