考虑相邻的两个树的高度
算出相邻两个树高度满足题意的时间区间
最后对每个时间区间取并 如果交集不为0 则取交集最小的 如果交集为0 则不成立
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=1e5+5;
ll a[maxn],g[maxn];
int n;
ll L=0,R=1e9;
ll maxl(ll aa,ll bb){
if(aa>bb)return aa;
return bb;
}
ll minl (ll aa,ll bb){
if(aa>bb)return bb;
return aa;
}
int main(){
freopen("plants.in","r",stdin);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>g[i];
for(int i=1;i<n;i++){
if(g[i]==g[i+1]){
if(a[i]<=a[i+1]){
L=maxl(L,0);
R=minl(R,1e9);
}
else{
cout<<-1<<endl;
return 0;
}
}
else if(g[i]<g[i+1]){
if(a[i]<=a[i+1]){
L=maxl(L,0);
R=minl(R,1e9);
}
else {
ll t=(a[i]-a[i+1])/(g[i+1]-g[i]);
if((a[i]-a[i+1])%(g[i+1]-g[i]))t++;
L=max(L,t);
}
}else if(g[i]>g[i+1]){
if(a[i]>a[i+1]){
cout<<-1<<endl;
return 0;
}
else {
ll t=(a[i+1]-a[i])/(g[i]-g[i+1]);
if((a[i+1]-a[i])%(g[i]-g[i+1]))t++;
R=minl(R,t);
}
}
}
if(L<=R)cout<<L<<endl;
else cout<<-1<<endl;
return 0;
}