其他分享
首页 > 其他分享> > Codeforces Round #763 (Div. 2) C. Balanced Stone Heaps

Codeforces Round #763 (Div. 2) C. Balanced Stone Heaps

作者:互联网

题目

1.题目大意

2.题目分析

3.题目代码

#include <iostream>
#define MAX 1e9
using namespace std;

bool judge(int a[], int b[], int i, int mid)
{
    if(b[i]==mid)
        return true;
    else if(b[i]>=mid)
    {
        int d = min(a[i],b[i]-mid)/ 3;//分出去多出来的属于原来的那部分
        //b[i] -= 3*d;  //一遍过_没必要减了
        b[i-1] += d;
        b[i-2] += 2*d;
        return true;
    }
    else
        return false;
}

int main()
{
    int t;
    //freopen("./in.txt","r",stdin);
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        int a[n];
        for(int i=0;i<n;i++)
            cin >> a[i];
        int l=1,r=MAX;
        int ans = 0;
        while(l<=r)
        {
            int mid = (l + r) / 2;
            int b[n];
            for(int j=0;j<n;j++)
                b[j] = a[j];
            bool flag = true;
            for(int i=n-1;i>=2;i--)
            {
                flag = judge(a, b, i , mid);
                if(!flag)
                    break;
            }
            if(flag&&b[0]>=mid&&b[1]>=mid)//单独判断头上两个_后面不行的表达式可以直接短路
                flag = true;
            else
                flag = false;
            if(flag)
            {
                ans = mid;
                l = mid + 1;
            }
            else
                r = mid - 1;
        }
        cout << ans << endl;
    }
    return 0;
}

标签:Heaps,Stone,题目,int,763,mid,石头,flag,移动
来源: https://www.cnblogs.com/zhangyi101/p/15768606.html