题解:

贪心很简单,分类讨论一下就可以了

用矩阵乘法优化这个过程

由于要维护和所以可以搞成三维矩阵

mo数是1e7+7我写了1e9+7真是很无语

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define me(x) memset(x,0,sizeof(x))
#define rint register ll
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
const ll INF=1e9;
const ll N=2e5;
const ll mo=10000007;
ll a[N],n,m;
ll max1=-INF,max2=-INF;
ll sum;
struct re{ll a[3][3];re(){me(a);}
}now;
IL re js(re a,re b)
{re c;rep(i,0,2)rep(j,0,2){rep(k,0,2){c.a[i][j]+=a.a[i][k]*b.a[k][j];c.a[i][j]%=mo;}}return(c);
}
re fsp(ll k)
{if (k==1) return(now);re now2=fsp(k/2);now2=js(now2,now2);if (k%2) now2=js(now2,now);return(now2);
}
ll b[3][3];
int main()
{freopen("1.in","r",stdin);freopen("1.out","w",stdout);ios::sync_with_stdio(false);cin>>n>>m;rep(i,1,n){ll x;cin>>x;if (x>=max1){max2=max1; max1=x;} elseif (x>max2){max2=x;}sum+=x;sum%=mo;}sum%=mo;if (max1<0){cout<<((sum+1ll*(max1+max2)*m)%mo+mo)%mo<<endl;exit(0);} elseif (max2>=0){#define b now.ab[0][0]=1; b[0][1]=1; b[0][2]=1;b[1][0]=1; b[1][1]=0; b[1][2]=0;b[2][0]=0; b[2][1]=0; b[2][2]=1;re now2=fsp(m);ll ans=sum+now2.a[0][0]*max1%mo+now2.a[1][0]*max2%mo+now2.a[0][2]*max1%mo+now2.a[1][2]*max2%mo-max1;ans=(ans%mo+mo)%mo;cout<<ans<<endl;} else{ll kk=(-max2+max1-1)/max1;ll ans=0;if (kk<m){b[0][0]=1; b[0][1]=1; b[0][2]=0;b[1][0]=0; b[1][1]=1; b[1][2]=1;b[2][0]=0; b[2][1]=0; b[2][2]=1;re now2=fsp(kk);ll t1=(max1*now2.a[0][1]+max2*now2.a[1][1])%mo;ans=(sum+t1-max2+now2.a[0][2]*max1+now2.a[1][2]*max2)%mo;max2=t1;b[0][0]=1; b[0][1]=1; b[0][2]=1;b[1][0]=1; b[1][1]=0; b[1][2]=0;b[2][0]=0; b[2][1]=0; b[2][2]=1;now2=fsp(m-kk);ans+=now2.a[0][0]*max1+now2.a[1][0]*max2+now2.a[0][2]*max1+now2.a[1][2]*max2-max1;ans=(ans%mo+mo)%mo;} else{b[0][0]=1; b[0][1]=1; b[0][2]=0;b[1][0]=0; b[1][1]=1; b[1][2]=1;b[2][0]=0; b[2][1]=0; b[2][2]=1;re now2=fsp(m);ll t1=(max1*now2.a[0][1]+max2*now2.a[1][1])%mo;ans=(sum+t1-max2+now2.a[0][2]*max1+now2.a[1][2]*max2)%mo;ans=(ans%mo+mo)%mo;}cout<<ans<<endl;}return 0;
}

转载于:https://www.cnblogs.com/yinwuxiao/p/9493066.html

bzoj 4547: Hdu5171 小奇的集合相关推荐

  1. 【BZOJ4547】【HDU5171】小奇的集合,暴力+矩阵乘法

    Time:2016.08.18 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 基本想法是每次找出最大的两个相加即可 而且由于题目要求,起始的n个数中至少有一个是正整数 ...

  2. [HDU517] 小奇的集合

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

  3. Bzoj 4548: 小奇的糖果(双向链表+排序+树状数组)

    以下内容来自ShallWe's Blog 题目 4548: 小奇的糖果 Description 有\(N\)个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能 ...

  4. bzoj 2281: [Sdoi2011]黑白棋 bzoj 4550: 小奇的博弈(Nimk博弈+DP)

    4550: 小奇的博弈 Time Limit: 2 Sec  Memory Limit: 256 MB Submit: 68  Solved: 42 [Submit][Status][Discuss] ...

  5. 代码: html 页面小效果 (集合,待补充)

    代码: html 页面小效果 (集合,待补充) 标签切换(下部内容区跟着切换): 2016-6-2 <script type="text/javascript" src=&q ...

  6. 小奇遐想 树状数组实现+容斥思想

    问题 M: 小奇遐想 时间限制: 1 Sec  内存限制: 128 MB 提交: 165  解决: 21 [提交] [状态] [讨论版] [命题人:admin] 题目描述 撷来一缕清风飘渺 方知今日书 ...

  7. BZOJ 4443: [Scoi2015]小凸玩矩阵

    二次联通门 : BZOJ 4443: [Scoi2015]小凸玩矩阵 /*BZOJ 4443: [Scoi2015]小凸玩矩阵本来以为是道数据结构题后来想了想发现不可做就考虑二分dp判断推方程推不出来 ...

  8. 【bzoj4550】小奇的博弈 博弈论+dp

    题目描述 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色.最左边是白色棋子,最右边 是黑色棋子,相邻的棋子颜色不同. 小奇可以移动白色棋子,提比可以移动黑色的棋子,它们 ...

  9. 状态规划P4270小奇挖矿2

    问题描述 [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. [问题描述] 现在有m+1个星球,从左到右标号为0到m,小 ...

最新文章

  1. 两个列表之间移动数据
  2. 如何下载github项目中的某一部分
  3. mysql三范式_MySQL设计之三范式的理解
  4. SpringBoot整合Swagger 自动生成在线API文档 偷懒必备 同时也是我们的基本操作啦!!!
  5. .net随笔-vb.net Accord.Net机器学习之SVM分类
  6. checkbox 选中的id拼接长字符串
  7. linux环境没有bzip2,Linux系统中安装使用Bzip2来压缩文件的方法讲解
  8. Ubuntu 14.04 安装flash插件;安装Cairo-Dock; 美化为Mac
  9. 特殊的求和(函数和循环)
  10. VS 2019 要来了,是时候了解一下 C# 8.0 新功能
  11. 考研编程练习----排名
  12. java listeners_Java ActionListeners
  13. 控件进阶 编辑学生的窗体
  14. java变量自增题的分解08251944
  15. 在ecshop商品详情页显示供货商
  16. 基于Linux CentOS搭建FTP服务
  17. 谷歌设置支持webgl
  18. vue如何编写组件可以通过Vue.use()使用
  19. 河北农大计算机专业全国排名,2019河北农业大学现代科技学院专业排名
  20. springboot集成阿里云短信

热门文章

  1. Visual Studio Code (VScode)支持哪些编程语言
  2. 大众26亿美元投资自动驾驶公司,可这行人才还在继续流失
  3. 计算机视觉与深度学习,看这本书就够了
  4. 程序员应该学习C语言的十个理由
  5. mysql有没有批量游标_MySQL使用游标批量处理进行表操作_MySQL
  6. java对象比较 hashcode_Java Objects.hash()与自己实现的hashCode()比较
  7. Oracle session解释
  8. 008_Redis的ZSet数据类型
  9. Linux给命令设置超时时间,Linux命令技巧和时间设置
  10. mysql 业务账户_mysql的事务