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. 【viterbi维特比译码】卷积码为(2,1,7)标准卷积码和维特比译码的FPGA实现
  2. 向大家推荐几本数据库入门的书
  3. EF Core 数据变更自动审计设计
  4. 【Text_Classification】学习到的语法知识
  5. 定理在数学中的简写形式_湘教版八年级数学上册知识点总结
  6. 视频编解码(七):profilelevel简介、ffmpeg如何控制profilelevel、编码效率
  7. Oracle 备份shell,oracle数据库shell备份脚本
  8. Orchard详解--第八篇 拓展模块及引用的预处理
  9. 基于hilbert变换的数字信号_hilbert变换
  10. 抖音短视频去水印网站 视频消重防删免费
  11. docker中php环境慢,解决访问本地 docker 项目慢的问题
  12. python基础入门小结(1)
  13. Mac平台安卓模拟器:网易MuMu mac中文免费版(支持12系统)
  14. 《SiamMask:Fast Online Object Tracking and Segmentation:A Unifying Approach》论文笔记
  15. 红外成像单筒望远镜TFN TD7产品 型号评测
  16. Docker、Docker、Docker
  17. 基于带约束S型加减速曲线的空间直线插补与空间圆弧插补算法(Matlab)
  18. AG9311功能应用和结构设计框图参考
  19. [编程题]走斜线Java
  20. C语言 ——二维数组

热门文章

  1. opengl学习笔记(三)
  2. scrollbarStyle属性
  3. 2048游戏c语言实验报告,2048游戏语言实验报告.doc
  4. leetcode344题:反转字符串
  5. 全选 单选和反选的实现
  6. python跳过错误_Pandas之read_csv()读取文件跳过报错行的解决
  7. 自定义php报错信息,自定义PHP的错误报告处理方式
  8. java中取系统时间_JAVA中获取当前系统时间(示例代码)
  9. aix oracle监听配置_Oracle数据库03用户权限与数据库的连接
  10. python执行的命令_如何在Python中执行外部命令