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也 ...
随机推荐
- HDU 6170 Two strings( DP+字符串匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=6170 题目大意: 给出两个字符串s1和s2(长度小于等于2500). s1是一个正常的包含大小写字母的字符串,s ...
- PHP中的日期相关函数(一)
日期相关的操作函数是我们在日常的工作开发中最常接触到的功能.当然,大部分同学可能最多用到的就是 date() . time() 这两个函数,我们今天先不讲这两个函数,或许后面的文章也不太会讲它们,毕竟 ...
- symfony中模板生成路径两种方式
1. 使用url('route_a_b_c') 这种方式会是全路径 : http://www.test.com/a/b/c 2. 使用path('route_a_b_c') 这种方式只是路径: /a ...
- 总结了下PHPExcel官方读取的几个例子
1.使用 PHPExcel_IOFactory 读取文件 $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); 2.使用一个特定的读取类,读 ...
- Java安全之 ClassLoader类加载器
Java安全之 ClassLoader类加载器 0x00 前言 前面这里抛出一个问题,Java到底是什么类型的编程语言?是编译型?还是解释型?在这个问题是其实一直都都有疑惑,如果说是解释型语言的话,那 ...
- Python3入门系列之-----循环语句(for/while)
前言 for循环在Python中是用的比较多的一种循环方法,小伙伴需要熟练掌握它的使用 本章节将为大家介绍 Python 循环语句的使用.Python 中的循环语句有 for 和 while for循 ...
- docker 安装 wordpress,通过nginx反向代理,绑定域名,配置https
假设docker已经安装好了,如果没有安装,可以照着 5分钟安装docker教程. 一. 下载镜像 默认下载最新版本,如果想指定对应版本,可以用冒号后加版本,像这样mysql:5.7: docker ...
- Windows 11 正式版 Build 22000.194 官方简体中文版、英文版(消费者版、商业版)下载
昨天阿三正式发布了 Windows 11,版本号竟然是 22000.194,也就是 9 月 16 日的 测试版 22000.194,仅仅是文件改了个名,特别是消费者版本 hash 校验都是一致的. W ...
- 数据库MySQL主从-GTID
1.第一步在主服务器上/etc/my.cnf/下添加 log-bin=log-bin server-id=1 gtid_mode=ON enforce_gtid_consistency 2.第二步:重 ...
- 解析csv数据绘制曲线图
一个解析csv数据的小工具,所做项目中要查看脉冲图谱,经理就让我这个刚入职的小萌新写了个小程序.同事将csv格式的脉冲数据发给我,我的想法就是,将这些csv里的数据作为纵轴,x++为横轴,绘制出折线图 ...