0
点赞
收藏
分享

微信扫一扫

E. Breaking the Wall

Brose 2022-05-03 阅读 44
c++算法
#include<stdio.h>
#include<math.h>
#include<algorithm>

using namespace std;
const int N = 2e5 + 10;
int a[N]; 

int main(){
	int n;
	int d1 = 0x3f3f3f3f,d2 = 0x3f3f3f3f;
	
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++) {
		scanf("%d",&a[i]);
		if(d1 > a[i]) {
			d2 = d1;
			d1 = a[i]; 
		}
		else if(d2 > a[i]) {
			d2 = a[i];
		}
	}
	
	int res = d1 / 2 + d2 / 2;
	
	if(d1 % 2) res ++;
	if(d2 % 2) res ++;
	
	
	for(int i=2;i<n;i++) {
		double A = a[i - 1];
		double B = a[i];
		double C = a[i + 1];
		
		res = min(res,(int)min(ceil((A-1)/2)+ceil((C-1)/2) + 1,ceil(A/2)+ceil(C/2)));
		
		res = min(res,(int)max({ceil(A / 2),ceil(B / 2),ceil((A+B)/3)}));
		res = min(res,(int)max({ceil(C / 2),ceil(B / 2),ceil((C+B)/3)}));
	}
	
	res = min(res,(int)max({ceil((double)a[1] / 2),ceil((double)a[2] / 2),ceil((double)(a[1]+a[2])/3)}));
	res = min(res,(int)max({ceil((double)a[n] / 2),ceil((double)a[n-1] / 2),ceil((double)(a[n]+a[n-1])/3)}));
	
	
	printf("%d\n",res);
	
	return 0;
}
/*
2
0 3
*/
举报

相关推荐

0 条评论