func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native )   using namespace std;   const long long MOD = 1000000007;   const int INF = 1e9;   const long long LINF = 1LL * INF * INF;   const int MAXN = 100007;   const double EPS = 1e-7;   const int DX[4] = {1, 0, -1, 0}, DY[4] = {0, 1, 0, -1};   int n, m, r, k;   set<pair<int, int> > U;   priority_queue<pair<long long, pair<int, int> > > Q;   long long f(int i, int j) {     return (min(i, n - r) - max(0, i - r + 1) + 1LL) *            (min(j, m - r) - max(0, j - r + 1) + 1LL);   }   int main() {     ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);     long long s = 0;     cin >> n >> m >> r >> k;     Q.push(make_pair(f(n / 2, m / 2), make_pair(n / 2, m / 2)));     U.insert(make_pair(n / 2, m / 2));     for (int j = (0); j < (k); ++j) {       s += Q.top().first;       int x = Q.top().second.first, y = Q.top().second.second;       Q.pop();       for (int i = (0); i < (4); ++i) {         if (x + DX[i] >= 0 && x + DX[i] < n && y + DY[i] >= 0 && y + DY[i] < m &&             !U.count(make_pair(x + DX[i], y + DY[i]))) {           Q.push(make_pair(f(x + DX[i], y + DY[i]),                            make_pair(x + DX[i], y + DY[i])));           U.insert(make_pair(x + DX[i], y + DY[i]));         }       }     }     cout << fixed << setprecision(12) << s / (n - r + 1.0) / (m - r + 1.0);     return 0;   }   