func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, m, r, k, tot;   int dx[] = {0, -1, 0, 1};   int dy[] = {-1, 0, 1, 0};   struct Cell {     long long c, x, y;     bool operator<(const Cell &oth) const { return c < oth.c; }   };   class Map {    private:     set<long long> vis;       public:     bool isVisit(long long x, long long y) {       return vis.count((x - 1) * m + y - 1);     }     void setVisit(long long x, long long y) { vis.insert((x - 1) * m + y - 1); }   } mp;   long long calc(long long x, long long y) {     return min(r, min(n - r + 1, min(x, n - x + 1))) *            min(r, min(m - r + 1, min(y, m - y + 1)));   }   priority_queue<Cell> pq;   void solve() {     scanf( %lld%lld%lld%lld , &n, &m, &r, &k);     pq.push({calc(r, r), r, r});     mp.setVisit(r, r);     while (!pq.empty() && k) {       Cell cur = pq.top();       pq.pop();       k--;       tot += cur.c;       for (int i = 0; i < 4; i++) {         int nx = cur.x + dx[i], ny = cur.y + dy[i];         if (0 < nx && nx <= n && 0 < ny && ny <= m && !mp.isVisit(nx, ny)) {           pq.push({calc(nx, ny), nx, ny});           mp.setVisit(nx, ny);         }       }     }     printf( %.10f n , 1.0 * tot / (1.0 * (n - r + 1) * (m - r + 1)));   }   int main() {     solve();     return 0;   }   