hdu 5171 GTY's birthday gift(数学,矩阵快速幂)
题意:
开始时集合中有n个数。
现在要进行k次操作。
每次操作:从集合中挑最大的两个数a,b进行相加,得到的数添加进集合中。
以此反复k次。
问最后集合中所有数的和是多少。
(2≤n≤100000,1≤k≤1000000000)
思路:
写出来发现是要求Fibonaci的前n个数的和。
Fibonaci是用矩阵快速幂求的,这个也可以。
[Sn,Fn,Fn-1]=[某个矩阵]*[Sn-1,Fn-1,Fn-2]
[S2,F2,F1]=[2,1,1]
然后写,,,
这个代码有些繁琐,应该把矩阵操作单独写成函数。
日后更新。
代码:
ll const mol = 10000007; int n,k;
ll ans;
ll matrix[4][4];
int a[100005]; void matrixSolve(int k){ // ¾ØÕóµÄk´Î·½
if(k==0){
mem(matrix,0);
matrix[1][1]=1;
matrix[2][2]=1;
matrix[3][3]=1;
return;
}
if(k==1){
mem(matrix,0);
matrix[1][1]=matrix[1][2]=matrix[1][3]=1;
matrix[2][2]=matrix[2][3]=1;
matrix[3][2]=1;
return;
}
matrixSolve(k/2);
ll tempMatrix[4][4];
mem(tempMatrix,0);
rep(i,1,3){
rep(j,1,3){
rep(k,1,3){
tempMatrix[i][j]=(tempMatrix[i][j]+matrix[i][k]*matrix[k][j]%mol)%mol;
}
}
}
rep(i,1,3){
rep(j,1,3){
matrix[i][j]=tempMatrix[i][j];
}
}
if((k&1)==1){
ll temp2Matrix[4][4];
mem(temp2Matrix,0);
temp2Matrix[1][1]=temp2Matrix[1][2]=temp2Matrix[1][3]=1;
temp2Matrix[2][2]=temp2Matrix[2][3]=1;
temp2Matrix[3][2]=1; ll temp3Matrix[4][4];
mem(temp3Matrix,0);
rep(i,1,3){
rep(j,1,3){
rep(k,1,3){
temp3Matrix[i][j]=(temp3Matrix[i][j]+tempMatrix[i][k]*temp2Matrix[k][j])%mol;
}
}
}
rep(i,1,3){
rep(j,1,3){
matrix[i][j]=temp3Matrix[i][j];
}
}
} } ll solve(int k){ //calc Sk
ll s2=2,f2=1,f1=1;
matrixSolve(k-2);
ll sk=(matrix[1][1]*s2+matrix[1][2]*f2+matrix[1][3]*f1)%mol;
return sk;
} int main(){ while(cin>>n>>k){
ans=0;
rep(i,1,n){
scanf("%d",&a[i]);
ans=(ans+a[i])%mol;
}
sort(a+1,a+1+n);
if(k==1){
ans=(ans+a[n-1])%mol;
ans=(ans+a[n])%mol;
printf("%I64d\n",ans);
}
else{
int xx=a[n-1];
int yy=a[n];
ll ans1=(solve(k)*(ll)xx)%mol;
ll ans2=((solve(k+1)-1)*(ll)yy)%mol;
ans=(ans+ans1+ans2)%mol;
printf("%I64d\n",ans);
}
} return 0;
}
hdu 5171 GTY's birthday gift(数学,矩阵快速幂)的更多相关文章
- GTY's birthday gift【矩阵快速幂】
题目大意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次,每次可以向可重集中加入一个数 a+b ...
- 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
GTY's birthday gift 问题描述 GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次 ...
- BestCoder Round #29——A--GTY's math problem(快速幂(对数法))、B--GTY's birthday gift(矩阵快速幂)
GTY's math problem Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 1757 A Simple Math Problem(矩阵快速幂)
题目链接 题意 :给你m和k, 让你求f(k)%m.如果k<10,f(k) = k,否则 f(k) = a0 * f(k-1) + a1 * f(k-2) + a2 * f(k-3) + …… ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- (hdu 6030) Happy Necklace 找规律+矩阵快速幂
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6030 Problem Description Little Q wants to buy a nec ...
- hdu 2604 Queuing dp找规律 然后矩阵快速幂。坑!!
http://acm.hdu.edu.cn/showproblem.php?pid=2604 这题居然O(9 * L)的dp过不了,TLE, 更重要的是找出规律后,O(n)递推也过不了,TLE,一定 ...
- hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***
分析:假设g(g(g(n)))=g(x),x可能非常大,但是由于mod 10^9+7,所以可以求出x的循环节 求出x的循环节后,假设g(g(g(n)))=g(x)=g(g(y)),即x=g(y),y也 ...
随机推荐
- 【PHP】数组按照字母排序
/** * 将数组按字母A-Z排序 * @return [type] [description] */ private function chartSort($list) { // $user=$th ...
- ecshop刷新页面出现power by ecshop和链接的解决办法
当小伙伴在使用echop模板进行修改的时候,如果你删掉底部自带版权后,再调试程序刷新界面的时候,时不时就会冒出一个power by ecshop,而且是带有链接的,很不舒服,所以需要去掉,下面是最简单 ...
- TP框架 商城前台用户注册方法
//注册 public function register(){ if(IS_POST){ //接收数据 $data = I('post.'); $model = D('User'); $data[' ...
- python学习笔记(十五)-异常处理
money = input('输入多少钱:') months = input('还几个月:') try: res = calc(int(money),int(months)) except ZeroD ...
- CF990G-GCD Counting【dfs】
正题 题目链接:https://www.luogu.com.cn/problem/CF990G 题目大意 给出一棵有点权的树,对于每个\(k\)求有多条路径的点权\(gcd\)为\(k\) \(1\l ...
- win32 TreeCtrl控件通知消息, LVN_SELCHANGED和LVN_ITEMCHANGED用法
今天出了个奇怪的问题,当我在主窗口上创建一个用模板对话框的子窗口时, 在子窗口上放的TreeCtrl控件不响应LVN_SELCHANGED消息,也是晕死了, 我以为是消息捕获的问题,我在主窗口上也捕获 ...
- Python代码阅读(第11篇):展开嵌套列表
Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现了展开嵌套列表的功能,将一个嵌套的list展开成一个一维list(不改变原有列表的顺序). 本篇阅读的代 ...
- windos10环境下编译python3版pjsua库
环境:windows10_x64python3.9_x64pjsua-2.10vs2015 pjsua编译参考这里: https://www.cnblogs.com/MikeZhang/p/pjsip ...
- 记一次 .NET 某招聘网后端服务 内存暴涨分析
一:背景 1. 讲故事 前段时间有位朋友wx找到我,说他的程序存在内存阶段性暴涨,寻求如何解决,和朋友沟通下来,他的内存平时大概是5G 左右,在某些时点附近会暴涨到 10G+, 画个图大概就是这样. ...
- 微信小程序内判断是否关注公众号(JAVA)
微信小程序内判断是否关注公众号(JAVA) 思路来源(第二种): https://blog.csdn.net/Yanheeee/article/details/117295643 /** * 总体思路 ...