CF1700D
思路
看起来答案好像是
在进行了上面的思考后,容易产生一个误解,即会漏很多水出去。其实不会,因为我们开水龙头的时候,肯定是先开第一个,再开第二个,这样依次开下去。然后可以这样想,我们把第一个水龙头开完
题解
设
- 若
t<X ,无解; - 否则,答案为
\lceil \frac {\sum v}{t} \rceil 。
代码
#include<bits/stdc++.h>
#define int long long
const int N=1005000;
using namespace std;
int n,q,a[N];
int res;
void solve(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],a[i]+=a[i-1];
for(int i=1;i<=n;i++)res=max(res,(a[i]+i-1)/i);
cin>>q;
for(int i=1;i<=q;i++){
int x;cin>>x;
cout<<(x<res?-1:(a[n]+x-1)/x)<<'\n';
}
}
main(){
ios::sync_with_stdio(0);
solve();
}