100100+99100+⋯+1100≈100ln100
stone throws (it takes 100−k100 moves on average to get a stone into a new section if k sections already have a stone). So the answer is at least 100ln100≈450.
On the other hand, if we divide the river into 200 2-foot sections, then once we have a stone in each section we are guaranteed to be able to cross. By a similar argument, we obtain that the answer is at most 200ln200≈1050.
Estimates near these bounds earn about 5 to 7 points. An estimate in between can earn close to 20 points.
To compute the answer (almost) exactly, we use the following argument.
Scale the problem so the river is of size 1, and the jumps are of size 0.01. Suppose that after n throws, the stones thrown are located at positions 0<x1<x2<⋯<xn<1. Let x0=0, xn+1=1, r=0.01. Define P(n) to be the probability that you still cannot cross the river after n throws. In other words, there exists i such that xi+1−xi>r. Then our answer is ∑n=0∞P(n).
By PIE we can write
P(n)=i=1∑∞(−1)i−1(in+1)max(1−ir,0)n
based on which intervals xi+1−xi have length greater than r. Now we switch the order of summation:
n=0∑∞P(n)=n=0∑∞i=1∑∞(−1)i−1(in+1)max(1−ir,0)n=i=1∑∞(−1)i−1n=0∑∞(in+1)max(1−ir,0)n
Let x=max(1−ir,0). Then
n=0∑∞(in+1)xn=xi−1j=0∑∞(ii+j)xj=(1−x)i+1xi−1
Thus, our answer is
i=1∑⌊1/r⌋(−1)i−1(ir)i+1(1−ir)i−1≈712.811
where the last approximation uses the C++ code below.
```
#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
int main() {
ld sum = 0, r = 0.01;
for (int i = 1; ; ++i) {
ld x = 1-r*i; if (x <= 0) break;
ld ex = pow(x/(1-x),i-1)/(1-x)/(1-x);
if (i&1) sum += ex;
else sum -= ex;
}
cout << fixed << setprecision(8) << sum;
}
```