Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstdio>
- #include <iomanip>
- #include <sstream>
- #include <cstring>
- #include <string>
- #include <cmath>
- #include <stack>
- #include <list>
- #include <queue>
- #include <deque>
- #include <set>
- #include <map>
- #include <vector>
- #include <algorithm>
- #include <numeric>
- #include <utility>
- #include <functional>
- #include <limits>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef unsigned int ui;
- const double pi = acos(-1.0);
- #define oned(a, x1, x2) { cout << #a << ":"; for(int _i = (x1); _i < (x2); _i++){ cout << " " << a[_i]; } cout << endl; }
- #define twod(a, x1, x2, y1, y2) { cout << #a << ":" << endl; for(int _i = (x1); _i < (x2); _i++){ for(int _j = (y1); _j < (y2); _j++){ cout << (_j > y1 ? " " : "") << a[_i][_j]; } cout << endl; } }
- #define mp(x, y) make_pair(x, y)
- int n, m;
- double dp[1000005], psum[1000005];
- void solve() {
- for(int i = n; i <= n*m; i++) {
- dp[i] = i*1./n;
- }
- for(int k = n-1; k > 0; k--) {
- for(int i = 0; i < n*m; i++) {
- psum[i+1] = dp[i+1]+psum[i];
- }
- double ik = 1./k, im = 1./m;
- for(int i = k; i <= n*m; i++) {
- dp[i] = max(i*ik, (psum[min(n*m,i+m)]-psum[i])*im);
- }
- }
- double res = 0;
- for(int i = 1; i <= m; i++) {
- res += dp[i];
- }
- cout << fixed << setprecision(12);
- cout << res / m << endl;
- }
- int main() {
- // freopen("F.in", "r", stdin);
- while(cin >> n >> m) {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement