Time:2016.08.18
Author:xiaoyimi
转载注明出处谢谢


传送门1
传送门2
思路:
基本想法是每次找出最大的两个相加即可
而且由于题目要求,起始的n个数中至少有一个是正整数
当最大的两个数都是非负整数时,我们发现每次的求值就是一个这样的数列

fi=fi−1+fi−2f_i=f_{i-1}+f_{i-2}

是不是很眼熟,很像fibonacci数列……
那我们直接构造转移矩阵,然后矩阵快速幂就可以了啊……
那求和怎么办?
我们先从S1S_1入手
S1=f1=f3−f2S_1=f_1=f_3-f_2
那S2S_2,S3S_3呢?
S2=f1+f2=(f3+f2)−f2=f4−f2S_2=f_1+f_2=(f_3+f_2)-f_2=f_4-f_2
S3=f1+f2+f3=(f4+f3)−f2=f5−f2S_3=f_1+f_2+f_3=(f_4+f_3)-f_2=f_5-f_2
是不是有些奥妙重重?
那我们就得到结论
Sn=fn+2−f2=2fn+fn−1−f2S_n=f_{n+2}-f_2=2f_n+f_{n-1}-f_2
这样求和问题就解决了

那如果上来一个负数一个正数怎么办
观察ai的取值范围[-10^5,10^5]
那么这一正一负的最坏情况就是1和-10^5
只要累加10^5次就可以把集合中最大的两个数变成正数了
所以小范围暴力递推就可以了
代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define mo 10000007
#define LL long long
using namespace std;
int n,k;LL tot;
int a[100005];
struct matrix
{LL m[3][3];void clear(){memset(m,0,sizeof(m));}
};
matrix mul(matrix a,matrix b)
{matrix c;c.clear();for (int i=1;i<=2;i++)for (int j=1;j<=2;j++)for (int k=1;k<=2;k++)c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j]%mo)%mo;return c;
}
void work(int aa,int bb,int k)
{matrix ans,x;ans.clear();x.clear();ans.m[1][1]=aa;ans.m[1][2]=bb;x.m[1][1]=x.m[1][2]=x.m[2][1]=1;for (;k;k>>=1,x=mul(x,x))if (k&1) ans=mul(ans,x);tot=((LL)tot+ans.m[1][1]*2+ans.m[1][2]-aa)%mo;tot=(tot+mo)%mo;cout<<tot;
}
main()
{scanf("%d%d",&n,&k);for (int i=1;i<=n;i++) scanf("%d",a+i);sort(a+1,a+n+1);for (int i=1;i<=n-2;i++)tot=(tot+a[i])%mo;int x=a[n],y=a[n-1];for (int i=1;i<=k;i++)if(y>=0) {work(x,y,k-i+1);return 0;}else tot=(tot+y)%mo,y=x+y;
}

【BZOJ4547】【HDU5171】小奇的集合,暴力+矩阵乘法相关推荐

  1. bzoj 4547: Hdu5171 小奇的集合

    题解: 贪心很简单,分类讨论一下就可以了 用矩阵乘法优化这个过程 由于要维护和所以可以搞成三维矩阵 mo数是1e7+7我写了1e9+7真是很无语 代码: #include <bits/stdc+ ...

  2. [HDU517] 小奇的集合

    题目链接 显然有贪心每次选择最大的两个数来做. 于是暴力地把最大的两个数调整到非负(暴力次数不超过1e5),接下来使用矩阵乘法即可. \[ \begin{pmatrix} B'\\S'\\T' \en ...

  3. jzoj6275-[NOIP提高组模拟1]小L的数列【矩阵乘法,欧拉定理】

    正题 题目大意 有递推式fi=∏j=1kfi−jbjf_{i}=\prod_{j=1}^kf_{i-j}^{b_j}fi​=j=1∏k​fi−jbj​​ 给出f1∼kf_{1\sim k}f1∼k​和 ...

  4. c语言定义int 输出4386,C语言 · 矩阵乘法

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  5. P5371-[SNOI2019]纸牌【矩阵乘法】

    正题 题目链接:https://www.luogu.com.cn/problem/P5371 题目大意 有nnn种牌,每种牌最多CCC张,XXX个限制形如kik_iki​种牌至少aia_iai​张. ...

  6. 小奇的矩阵(动态规划

    [题目 背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个 n*m 的矩阵, 矩阵中的每个元素 aij 为正整数. 接下来规定 1. 合法的路径初始从矩阵左上角出发, 每次只能向右或向 ...

  7. [usOJ5529]小奇探险

    题目 传送门 to usOJ 题目描述 小奇去遗迹探险,遗迹里有 NNN 个宝箱,有的装满了珠宝,有的装着废品. 小奇有地图,所以它知道每一个宝箱的价值,但是它不喜欢走回头路,所以要按顺序拿这 NNN ...

  8. 【BZOJ4548】小奇的糖果

    →原题传送门←(by Hzwer) 「题目背景」 小奇不小心让糖果散落到了地上,它对着满地的彩色糖果胡思乱想. 「问题描述」 有 N 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或 ...

  9. 「小奇模拟赛2」小奇的危机(from hzwer.com)

    「小奇模拟赛2」小奇的危机(from hzwer.com) 「题目背景」 小奇驾驶飞船来到了一个奇怪的星球,这个星球的所以城市都在地下,而且由于环境不断恶化,星球上发生了可怕的生化危机. 「问题描述」 ...

最新文章

  1. 双网卡绑定-bond0
  2. 对话框编程之非模态对话框 [04]
  3. html 未来元素绑定事件,jquery on如何给未来元素绑定事件?
  4. Repository模式
  5. 我的个人网站更新了!
  6. 在CentOS6.x下安装Compiz——桌面立方体,特效种种
  7. Microsoft Windows 7.0 build 7000 NAP测试--健康状态检测验证报告
  8. html循环自动点击事件,js循环遍历ul中li的点击事件,给给选中li添加css
  9. C语言单片机中延时程序的实现
  10. Python笔记-使用U2滑动APP
  11. Linux系统简介与准备
  12. 跨进程 API hook
  13. 低配本用win10服务器系统,低配电脑装win10会怎么样
  14. 优酷kux文件转码成mp4
  15. 关于fi dd ler 手机抓包 网卡地址地址_超详细的网络抓包神器 tcpdump 使用指南
  16. 【C++】严重性代码说明项目文件行错误
  17. 人生理财规划必备的“四笔钱”,你知道吗?
  18. 计算机三级网络技术考试上机,计算机等级考试三级网络技术上机答案
  19. 简易51单片机密码锁
  20. 中国云市场生变:华为云Q2份额超AWS,IaaS+PaaS迎来整体增长

热门文章

  1. python推导式pythonic必备
  2. 华为“方舟编译器”到底是啥?一文看懂TA如何让手机性能再突破
  3. PowerShell正则替换+批量修改文件名
  4. R语言学习笔记(七)方差分析
  5. 机器学习的MLE和MAP:最大似然估计和最大后验估计
  6. git 上传项目到linux仓库_总结:上传python项目至git上前的一些准备工作
  7. 谷歌地球最新host_听说《流浪地球》被豆瓣鄙视了,我们用数据看一把真相(上)...
  8. 编译原理pl/0 c语言版 pl0.h文件
  9. centos7 mysql 冲突_CentOS7安装MySQL冲突和问题解决小结
  10. 为什么谐振时电抗为0_高压直流输电(LCC-HVDC 和 MMC-HVDC)中平波电抗器的作用和选择策略...