Hdu 5172 GTY's birthday gift
2015-02-09 19:39
351 查看
题目链接:点击打开链接
题目的意思就是,给一个集合,每次找最大的两个值相加,再把这个新值加入集合中,一共有k次操作,求最终集合里的所有数的和,结果模上1e7+7,k可以到10^9。
其实就是找到初始的两个最大值,以之作为首项求斐波那契数列的前n项和。
显然是一个大矩阵+快速幂,应该说是一个比较水的题...
题目的意思就是,给一个集合,每次找最大的两个值相加,再把这个新值加入集合中,一共有k次操作,求最终集合里的所有数的和,结果模上1e7+7,k可以到10^9。
其实就是找到初始的两个最大值,以之作为首项求斐波那契数列的前n项和。
显然是一个大矩阵+快速幂,应该说是一个比较水的题...
#include <iostream> #include <math.h> #include <stdio.h> #include <string.h> using namespace std; #define Mod 10000007 #define LL long long LL ck[100010]; struct node{ LL mat[3][3]; }; node Fibo[100]; node unit; node zero; node mul(node a,node b){ node ret; ret = zero; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ for(int k = 0; k < 3;k++) ret.mat[i][j] = (ret.mat[i][j]+a.mat[i][k]*b.mat[k][j])%Mod; } } return ret; } void init(){ node a; for(int i=0;i<3;i++) for(int j = 0;j<3;j++) zero.mat[i][j] = 0; a = zero; a.mat[0][0] = 1; a.mat[1][1] = 1; a.mat[1][0] = 1; a.mat[1][2] = 1; a.mat[2][1] = 1; unit.mat[0][0] = 1; unit.mat[1][1] = 1; unit.mat[2][2] = 1; Fibo[1] = a; for(int i=2;i<=64;i++){ Fibo[i] = mul(Fibo[i-1],Fibo[i-1]); } } node deal(LL k){ LL tmp; tmp = k; node ret = unit; for(int i = 1;i <= 64&&tmp; i++ ){ if(tmp&1){ ret=mul(ret,Fibo[i]); } tmp>>=1; } return ret; } int main() { LL n,m,maxx,maxx2,index,block,a3,part; init(); LL ans; while(~scanf("%I64d%I64d",&n,&m)){ maxx = maxx2 = ans = 0; for(int i = 0; i < n; i ++){ scanf("%d",&ck[i]); ans = (ans + ck[i])%Mod; if(ck[i]>maxx){ index = i; maxx = ck[i]; } } for(int i = 0; i < n; i ++){ if(ck[i]>maxx2&&i!=index){ maxx2 = ck[i]; } } a3 = maxx + maxx2; node tmp,cal; tmp = zero; tmp.mat[0][0] = maxx2; tmp.mat[0][1] = maxx; tmp.mat[0][2] = maxx2; tmp = mul(tmp,deal(m+1)); ans = (ans+tmp.mat[0][0]-a3)%Mod; printf("%lld\n",ans); } return 0; }
相关文章推荐
- HDU-5172-GTY's gay friends-线段树单点更新
- HDU 5172 GTY's gay friends
- HDU 5172 GTY's gay friends(线段树)
- hdu 5172 GTY's gay friends
- hdu 5172 GTY's gay friends Hash随机算法
- hdu 5172 GTY's gay friends 线段树
- Hdu 5172 GTY's gay friends
- hdu 5172 GTY's gay friends (区间最值)
- HDU 5172 GTY's gay friends (预处理+线段树)
- hdu 5172 GTY's gay friends (线段树||hash)
- HDU 5172 GTY's gay friends HASH随机算法
- HDU 5170 GTY's math problem 精度判断问题
- HDU 5171 GTY's birthday gift(矩阵快速幂)
- HDU 5171 GTY's birthday gift (矩阵快速幂)
- HDOJ 题目5172 GTY's gay friends(线段树)
- HDU 5171 GTY's birthday gift (矩阵快速幂)
- HDU 5171 GTY's birthday gift (矩阵快速幂)
- HDU 5172 GTY's gay friends
- hdu 5171 GTY's birthday gift(矩阵快速幂)
- HDU 5172 GTY's gay friends (线段树)