关于P9755 [CSP-S 2023] 种树 民间数据
  • 板块灌水区
  • 楼主jr_linys
  • 当前回复11
  • 已保存回复11
  • 发布时间2023/10/23 13:49
  • 上次更新2023/11/2 11:44:04
查看原帖
关于P9755 [CSP-S 2023] 种树 民间数据
667763
jr_linys楼主2023/10/23 13:49

首先我考场上只有 2525 的特殊性质分。

对于每个点,假设第一秒种,二分什么时候长好,对所有点取最大值,洛谷民间数据就有 6565 分,而云斗学院只有 55 分。

希望加强一下。

#include<bits/stdc++.h>
#define int long long
#define ll __int128
using namespace std;
int read(){
	char c;bool f=0;
	while(c=getchar(),c<'0'||c>'9') if(c=='-') f=1;
	int x=c^'0';
	while(c=getchar(),c>='0'&&c<='9') x=x*10+(c^'0');
	return f?-x:x;
}
const int N=1e5,A=1e18,INF=2e18;
int n,a[N+5],b[N+5],c[N+5];
ll cmp(int u,int i){
	if(c[u]<0){
		int x=(b[u]-1)/(-c[u]);
		if(i>x) return (ll)b[u]*x+(ll)(x+1)*x/2*c[u]+i-x;
	}
	return (ll)b[u]*i+(ll)(i+1)*i/2*c[u];
}
signed main(){
	n=read();
	int l=n,r=A;
	for(int i=1;i<=n;++i){
		r=max(r,a[i]=read()),b[i]=read(),c[i]=read();
		int l_=0,r_=A;
		while(r_>l_+1){
			int mid=(l_+r_)>>1;
			if(cmp(i,mid)>=a[i]) r_=mid;
			else l_=mid;
		}
		l=max(l,r_);
	}
	printf("%lld",l);
}
2023/10/23 13:49
加载中...