题意:

开始时集合中有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(数学,矩阵快速幂)的更多相关文章

  1. GTY's birthday gift【矩阵快速幂】

    题目大意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次,每次可以向可重集中加入一个数 a+b ...

  2. HDU 5171 GTY's birthday gift 矩阵快速幂

    GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  3. hdu 5171 GTY's birthday gift

    GTY's birthday gift 问题描述 GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次 ...

  4. 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 ...

  5. 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) + …… ...

  6. HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  7. (hdu 6030) Happy Necklace 找规律+矩阵快速幂

    题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6030 Problem Description Little Q wants to buy a nec ...

  8. hdu 2604 Queuing dp找规律 然后矩阵快速幂。坑!!

    http://acm.hdu.edu.cn/showproblem.php?pid=2604 这题居然O(9 * L)的dp过不了,TLE,  更重要的是找出规律后,O(n)递推也过不了,TLE,一定 ...

  9. 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也 ...

随机推荐

  1. 集合遍历数组三种常用方式(Collecton和Map)

    Collection集合遍历数组的三种方式: 迭代器 foreach(增强for循环) JDK1.8之后的新技术Lambda 迭代器: 方法:public Iterator inerator():获取 ...

  2. HDU1213How Many Tables(基础并查集)

    HDU1213How Many Tables Problem Description Today is Ignatius' birthday. He invites a lot of friends. ...

  3. 剑指offer计划20( 搜索与回溯算法中等)---java

    1.1.题目1 剑指 Offer 07. 重建二叉树 1.2.解法 注释解法. 1.3.代码 class Solution { int[] preorder; HashMap<Integer, ...

  4. 异步servlet的原理探究

    异步servlet是servlet3.0开始支持的,对于单次访问来讲,同步的servlet相比异步的servlet在响应时长上并不会带来变化(这也是常见的误区之一),但对于高并发的服务而言异步serv ...

  5. 建立 F103C8T6 HAL库 Makefile FreeRTOS 工程

    F103C8T6 HAL库 Makefile FreeRTOS 工程模板 环境 该工程的开发平台为 ARM-GCC 工具链和 Make > arm-none-eabi-gcc -v gcc ve ...

  6. Zookeeper分布式安装部署

    1. 解压安装 1.1 解压Zookeeper安装包到/opt/module/目录下 tar -zxvf /opt/software/apache-zookeeper-3.6.2-bin.tar.gz ...

  7. fontawesome图标不显示的原因

    1.查看css路径是否正确 2.查看font文件夹内的字体文件是否引入 3.查看font文件夹内的字体资源路径是否正确

  8. 安装VM-TOOLS,解压tar包时提示目录磁盘空间不足

    在虚拟机里安装了ubuntu-18.04.4-desktop-amd64,安装VM-TOOLS,解压tar包时提示目录磁盘空间不足. 解决方法一: 打开terminal,输入:sudo apt ins ...

  9. 【C++ Primer Plus】编程练习答案——第2章

    1 void ch2_1() { 2 using namespace std; 3 cout << "xxxxxxxx" << endl; 4 } 5 6 ...

  10. T-SQL——透视PIVOT动态获取待扩展元素集

    目录 0.背景说明 1.准备测试数据 2.示例1--利用SELECT循环赋值 3.示例2--使用游标 4.示例3--使用FOR XML PATH() 5. 参考 志铭-2021年10月8日 00:57 ...