用户工具

站点工具


2020-2021:teams:wangzai_milk:20200810比赛记录

这是本文档旧的修订版!


2020牛客暑期多校训练营(第十场)

比赛情况

题号 A B C D E F G H I J
状态 O - - Ø O - - - ! O

O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试

比赛时间

2020-08-10 12:00-17:00

题解

E - Game

可以证明如果一个形状的右侧都是小于等于某一高度的时候可以保证左侧的高于某一高度的砖块可以被填进坑里,所以我们可以二分答案,然后贪心验证即可。

点击以显示 ⇲

点击以隐藏 ⇱

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
typedef long long ll;
int a[N],n;
ll sum[N];
bool check(int hei) {
	ll rem = 0;
	for (int i = n;i>= 1;i--) {
		if (a[i]>hei)rem+=a[i]-hei;
		if (a[i]<hei)rem=max(0ll,rem-hei+a[i]);
		if (rem != 0 && rem > (ll)hei*(i-1)-sum[i-1])return false;
	}
	return true;
}
int main() {
	int cas;
	scanf("%d",&cas);
	while (cas--) {
		scanf("%d",&n);
		for (int i = 1;i<= n;i++)
		{
			scanf("%d",&a[i]);
			sum[i] = sum[i-1]+a[i];
		}
		int l = 1,r = 1e9+5;
		while (l<r) {
			int mid = (l+r)>>1;
			if (check(mid))r = mid;
			else l = mid+1;
		}
		printf("%d\n",l);
	}
	return 0;
}


2020-2021/teams/wangzai_milk/20200810比赛记录.1597319121.txt.gz · 最后更改: 2020/08/13 19:45 由 infinity37