hdu 5171 GTY's birthday gift
GTY's birthday gift
GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次,每次可以向可重集中加入一个数 a+b (a,b\in S)a+b(a,b∈S),现在GTY想最大化可重集的和,这个工作就交给你了。
注:可重集是指可以包含多个相同元素的集合
多组数据(约3组),每组数据的第一行有两个数n,k(2 \leq n \leq 100000,1 \leq k \leq 1000000000)n,k(2≤n≤100000,1≤k≤1000000000) 表示初始元素数量和可使用的魔法数,第二行包含n个数a(1 \leq a_i \leq 100000)a(1≤ai≤100000)表示初始时可重集的元素
对于每组数据,模10000007输出可重集可能的最大和。
3 2
3 6 2
35
这道题的解题思路很简单,用矩阵快速幂实现一个斐波那契数列求和(初值改变)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
const int maxn=;
const int Max=1e5+;
const int MOD=;
int a[Max];
struct matrix
{
int w;
LL m[maxn][maxn]; //注意矩阵也要用LL,不然会出现溢出
matrix(int ww):w(ww){memset(m,,sizeof(m));};
matrix(){}
};
matrix operator * (matrix a,matrix b)
{
matrix res();
LL x;
for(int i=;i<res.w;i++)
{
for(int j=;j<res.w;j++)
{
x=;
for(int k=;k<res.w;k++)
{
x=(x+(LL)a.m[i][k]*b.m[k][j])%MOD;
}
res.m[i][j]=x;
}
}
return res;
}
matrix fast_cover(int k)
{
matrix base();
base.m[][]=base.m[][]=base.m[][]=;
base.m[][]=base.m[][]=base.m[][]=;
base.m[][]=base.m[][]=base.m[][]=;
matrix s();
s.m[][]=s.m[][]=s.m[][]=;
while(k)
{
if(k&) s=s*base;
base=base*base;
k>>=;
}
return s;
}
int main()
{
int n,k;LL sum;
while(scanf("%d%d",&n,&k)!=EOF)
{
sum=;
for(int i=;i<n;i++) scanf("%d",&a[i]),sum+=a[i];
sort(a,a+n);
matrix ss=fast_cover(k);
LL ans=(ss.m[][]*sum+ss.m[][]*a[n-]+ss.m[][]*a[n-])%MOD;
printf("%I64d\n",ans);
}
return ;
}
hdu 5171 GTY's birthday gift的更多相关文章
- 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(数学,矩阵快速幂)
题意: 开始时集合中有n个数. 现在要进行k次操作. 每次操作:从集合中挑最大的两个数a,b进行相加,得到的数添加进集合中. 以此反复k次. 问最后集合中所有数的和是多少. (2≤n≤100000,1 ...
- 1002 GTY's birthday gift
GTY's birthday gift Time Limit ...
- hdu 5171(矩阵快速幂,递推)
GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU5171 GTY's birthday gift —— 矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-5171 GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 5172 GTY's gay friends
GTY's gay friends 题意:给n个数和m次查询:(1<n,m<1000,000);之后输入n个数值(1 <= ai <= n):问下面m次查询[L,R]中是否存在 ...
- HDU 5172 GTY's gay friends 线段树
GTY's gay friends Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5172 GTY's gay friends 线段树+前缀和+全排列
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172 bc(中文):http://bestcoder.hdu.edu.cn/contest ...
- HDU 5170 GTY's math problem 水题
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5170 bc(中文):http://bestcoder.hdu.edu.cn/contests ...
随机推荐
- whl 安装
pymssql 安装 C:\Users\sas>pip install d:\pymssql--cp36-cp36m-win_amd64.whl Processing d:\pymssql--c ...
- yum install -y dos2unix
yum install -y dos2unix linux 怎么把^M去掉 - CSDN博客 http://blog.csdn.net/humanof/article/details/53044217 ...
- 【转载】Sybase数据库服务器端安装
sybase数据库的安装分为服务器端和客户端,本文先介绍一下服务器端的安装. 1.和其他程序一样,双击setup.exe. 2.出现欢迎界面,直接点击next即可. 3.下面选择相应国家的协议 ...
- win10系统下,开启数据库远程连接方式
右键左下角的windows标志,选择控制面板 2.查看方式修改为大图标 3.选择高级设置 4.新建入站规则 5.选择端口然后下一步 6.选择tcp协议,端口输入80,3306 7.选择允许连接 8.规 ...
- iOS 中OpenGL ES 优化 笔记 1
1,避免同步和Flushing操作 OpenGL ES的命令执行通常是在command buffer中积累一定量的命令后,再做批处理执行,这样效率会更高:但是一些OpenGL ES命令必须flush ...
- linux 查看内存和cpu
Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 ...
- 题解报告:poj 3070 Fibonacci
题目链接:http://poj.org/problem?id=3070 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, a ...
- InputStream和Reader
java.io下面有两个抽象类:InputStream和ReaderInputStream是表示字节输入流的所有类的超类Reader是用于读取字符流的抽象类InputStream提供的是字节流的读取, ...
- 精美对UI设计界面赏析
最美的UI设计界面赏析 . 喜欢就关注我吧
- [原创]Toolbar setNavigationIcon无效
最近在做一个Toolbar,setNavigationIcon()这个方法一直无效,说什么的都有,什么getSupportActionBar().setNavigationIcon()的,说设置sty ...