脑回路清奇的我看完题马上想到了如下代码,想法就是用 f1[i] 表示过了 i-1 天后可提交的木材总长度, f2[i] 表示过了 i-1 天后可以提交的木材生长速度之和,最后枚举天数,至于如何处理看代码吧(没有 TLE 但是 WA 75pts),请问这个做法错误在哪里,或者说代码哪里没写好?
大佬 orz
#include<bits/stdc++.h>
#define ll long long
#define N 200000
using namespace std;
int n;
ll s,l,h[N],a[N],ans=N*100;
ll f1[N*100],f2[N*100];
inline ll read(void)
{
ll x=0;
char c=getchar();
while(c>'9'||c<'0') c=getchar();
while(c<='9'&&c>='0')
{
x=x*10+c-'0';
c=getchar();
}
return x;
}
int main(void)
{
n=read();s=read();l=read();
for(int i=1;i<=n;i++) h[i]=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
ll x=l-h[i];
ll c;
if(x<0) c=0;
else c=x/a[i];
if(c*a[i]<x) c++;
if(c<=N*100)
{
f1[c+1]+=h[i]+c*a[i];
f2[c+1]+=a[i];
}
}
if(f1[1]>=s)
{
cout<<0<<endl;return 0;
}
for(ll i=2;;i++)
{
f1[i]+=f1[i-1]+f2[i-1];
f2[i]+=f2[i-1];
if(f1[i]>=s)
{
cout<<i-1<<endl;return 0;
}
}
return 0;
}