P9889 TLE求助!!!
  • 板块学术版
  • 楼主ThomasNO1
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/10 19:51
  • 上次更新2024/8/10 21:04:43
查看原帖
P9889 TLE求助!!!
1224955
ThomasNO1楼主2024/8/10 19:51

改了半天,第三点一直TLETLE。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e5 + 9;
int n,a[MAXN],T,m,h[MAXN];
bool check(int x){
	memset(h,0,sizeof(h));
	int num = m;
	for(int i = 1;i <= n;i++){
		if(h[i] < x){
			int t = (x - h[i] - 1) / a[i] + 1;
			h[i] += t * a[i];
			h[i + 1] += (t - 1) * a[i + 1];
			num -= (t << 1);num++;
		}
		else{
			if(i == n) return true;
			num--;
		}
		if(num < 0) return false;
	}
	return num >= 0;
}
void solve(){
	scanf("%lld%lld",&n,&m);
	for(int i = 1;i <= n;i++)
		scanf("%lld",&a[i]);
	int l = 0,r = 0x3f3f3f3f3f3f3f,ans = 0;
	while(l < r){
		int mid = (l + r) >> 1;
		if(check(mid + 1)){
			l = mid + 1;
			ans = mid + 1;
		}
		else r = mid;
	}
	printf("%lld\n",ans);
}
signed main(){
	scanf("%lld",&T);
	while(T--)
		solve();
	return 0;
}
2024/8/10 19:51
加载中...