有n堆石头。第i个堆有hi个石头。你想通过执行以下过程来改变堆中石头的数量。

从第3个堆到第n个堆,你按照这个顺序走一遍。
设i为当前堆的编号。
你可以选择一个数字d(0≤3⋅d≤hi),从第i堆移出d个石头到第(i-1)堆,再从第i堆移出2⋅d个石头到第(i-2)堆。
因此,之后hi减少了3⋅d,hi-1增加了d,hi-2增加了2⋅d。
你可以为不同的操作选择不同或相同的d。有些堆可能变成空的,但它们仍然算作堆。
在这个过程中,最小的堆中最大的棋子数是多少?

输入
每个测试包含多个测试用例。第一行包含测试用例的数量t(1≤t≤2⋅105)。测试用例的描述如下。

每个测试用例的第一行包含一个整数n(3≤n≤2⋅105)。

每个测试用例的第二行包含n个整数h1,h2,h3,...,hn(1≤hi≤109)。

保证所有测试用例的n之和不超过2⋅105。

输出
对于每个测试案例,打印出最小的堆所能包含的最大石子数。

例子
输入复制
4
4
1 2 10 100
4
100 100 100 1
5
5 1 1 1 8
6
1 2 3 4 5 6
输出拷贝
7
1
1
3
注意
在第一个测试案例中,初始堆大小为[1,2,10,100]。我们可以按以下方式移动棋子。

将3个石头和6个石头分别从第3堆移到第2堆和第1堆。堆的大小将是[7,5,1,100]。
从最后一个堆中的6个石头和12个石头分别移到第3和第2个堆中。堆的大小将是[7,17,7,82]。
在第二个测试案例中,最后一个堆是1,我们不能增加其大小。

在第三个测试案例中,最好不要移动任何石头。

在最后一个测试案例中,最终可实现的堆的配置可以是[3,5,3,4,3,3]。

求最小值最大二分问题

我们可以对最小值进行枚举然后进行二分进而求出最大值

两个数组a[N],b[N];

当我们从后边转移过来的b[i]>=mid的时候我们可以将a[i]的全部转移到前面,注意题目是从前往后所以我们向前转移的时候是不会超过a[i]本身的

那么当b[i]<mid的时候我们将可以对a[i]和b[i]+a[i]-mid取一个最小值然后用这个最小值向前面转移

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N];int b[N];
int maxx;int n;
bool check(int mid)
{for(int i=1;i<=n;i++) b[i]=0; for(int i=n;i>=3;i--){if(a[i]+b[i]>=mid){if(b[i]>=mid){b[i-1]+=(a[i]/3);b[i-2]+=2*(a[i]/3);}else{int x=min(a[i]+b[i]-mid,a[i]);b[i-1]+=(x/3);b[i-2]+=2*(x/3);}           }else{return 0;}}if(a[1]+b[1]<mid || a[2]+b[2]<mid) return 0;return 1;}
void solve()
{maxx=-1;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];maxx=max(maxx,a[i]);}int l=0,r=maxx;while(l<=r){int mid=(l+r)/2;if(check(mid)){l=mid+1;}elser=mid-1;}cout<<l-1<<endl;
}
int main()
{int t;cin>>t;while(t--){solve();}
}

P - Balanced Stone Heaps相关推荐

  1. [题集]Lecture 4. Leftist Heaps and Skew Heaps

    1.A leftist heap with the null path length of the root being r must have at least 2 r + 1 − 1 2^{r+1 ...

  2. bokeh pandas_使用Pandas和Bokeh将Rolling Stone的500张最伟大专辑可视化

    bokeh pandas by Gautham Koorma 通过Gautham Koorma 使用Pandas和Bokeh将Rolling Stone的500张最伟大专辑可视化 (Rolling S ...

  3. SP11469 SUBSET - Balanced Cow Subsets(折半搜索+状态压缩)难度⭐⭐⭐⭐★

    题目链接 SP11469 SUBSET - Balanced Cow Subsets 题目翻译 给出N(1≤N≤20)N(1≤N≤20)N(1≤N≤20)个数M(i)(1<=M(i)<=1 ...

  4. [Cracking the Coding Interview] 4.4 Check Balanced

    Implement a function to check if a binary tree is balanced. For the purpose of this question, a bala ...

  5. poj3264 - Balanced Lineup(RMQ_ST)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 45243   Accepted: 21240 ...

  6. 【leetcode】Balanced Binary Tree(middle)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  7. spoj Balanced Numbers(数位dp)

    一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...

  8. LeetCode Balanced Binary Tree

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  9. HDU 3709 Balanced Number

    Balanced Number 题意: 平衡数:存在该数中以一个数字为支点(pivot),点的"力矩"为该点到支点的距离乘以该点的值,而平衡指的是支点两侧的力矩和相等 思路: 易知 ...

最新文章

  1. NLP十大数据扩充策略
  2. 易创课堂深圳干货,趁热下载
  3. 计算机没有搜索筛选功能,EXCEL中筛选工具怎么没有搜索功能
  4. 详解Android Touch事件的传递机制
  5. java properties用法_java中Properties文件加载和使用方法
  6. 游戏筑基开发之字符串、字符指针、字符数组的相关知识梳理(C语言)
  7. 得到星期的sql语句和得到月末的sql语句
  8. 高质量前端资源周刊(第三十周)
  9. 如何从C快速过渡到C++
  10. 分享不会迟到,只会来的晚一点——16倍速视频播放
  11. WINDOWSXP主题风格美化教程
  12. python平均分及格率优秀率_跪求:请问怎样统计均分、优秀率、及格率、低分率的问题...
  13. 空降Leader,如何开展工作
  14. 网页错误代码汇总(整理不易,用心记住)
  15. html插入背景图片如何拉伸,css怎样拉伸背景图片?
  16. Spring Mvc - 用户注册服务端生成默认头像实现
  17. 爱快路由器接水星交换机-划分vlan
  18. Pytroch 深度学习 跑CIFAR10数据集
  19. 管理学十大经典图书推荐
  20. “金蝶KIS记账王”双11五折特惠

热门文章

  1. python:逻辑与或(and、or),按位与或异或(、|、^),逻辑短路
  2. 机器学习之 各种熵详解
  3. 从0基础到蓝桥杯C/C++B组国奖
  4. qq群 发言统计for tc
  5. sql 查询某个日期的几个工作日前的日期
  6. Homebrew卸载软件及其依赖包
  7. Mybatis---主键回填 (*^▽^*)
  8. Git从库中移除已删除大文件
  9. web端上传图片的几种方式
  10. c语言中fl,用C语言操作SPMC75内部FLSASH.doc