func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 201;   const int logn = 20;   struct matrix {     double a[maxn][maxn];     int n;     bool is_vec;     matrix() {}     void init(int n) {       this->n = n;       is_vec = 0;       for (int i = 1; i <= n; i++) {         for (int j = 1; j <= n; j++) {           a[i][j] = 0;         }       }     }     matrix operator*(const matrix &m2) const {       matrix ans;       ans.init(n);       if (is_vec) {         ans.is_vec = 1;         for (int j = 1; j <= n; j++) {           for (int k = 1; k <= n; k++) {             ans.a[1][j] += a[1][k] * m2.a[j][k];           }         }         return ans;       }       for (int i = 1; i <= n; i++) {         for (int j = 1; j <= n; j++) {           for (int k = 1; k <= n; k++) {             ans.a[i][j] += a[i][k] * m2.a[k][j];           }         }       }       return ans;     }   };   matrix A[logn];   int n;   int px[maxn], py[maxn];   vector<int> p[maxn][maxn];   int cnt[maxn];   bool vis[maxn][maxn];   void init();   double cal(int t, int m);   bool is_line(int a, int b, int c);   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       scanf( %d%d , &px[i], &py[i]);     }     init();     int q;     scanf( %d , &q);     while (q--) {       int t, m;       scanf( %d%d , &t, &m);       printf( %.7lf n , cal(t, m));     }     return 0;   }   double cal(int t, int m) {     m--;     matrix f;     f.init(n);     f.is_vec = 1;     f.a[1][t] = 1;     for (int i = 0; i < logn; i++) {       if ((m >> i) & 1) {         f = f * A[i];       }     }     double max_ans = 0;     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= cnt[i]; j++) {         double cur_ans = 0;         for (int u : p[i][j]) {           cur_ans += f.a[1][u];         }         cur_ans /= p[i][j].size();         max_ans = max(max_ans, cur_ans);       }     }     return max_ans;   }   void init() {     vector<int> cur;     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= n; j++) {         if (i == j || vis[i][j]) continue;         cur.clear();         cur.push_back(i);         cur.push_back(j);         for (int k = 1; k <= n; k++) {           if (i == k || j == k || !is_line(i, j, k)) continue;           cur.push_back(k);         }         for (int a : cur) {           vis[i][a] = 1;         }         p[i][++cnt[i]] = cur;       }     }     A[0].init(n);     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= cnt[i]; j++) {         for (int a : p[i][j]) {           A[0].a[i][a] += 1.0 / cnt[i] / p[i][j].size();         }       }     }     for (int i = 1; i < logn; i++) {       A[i] = A[i - 1] * A[i - 1];     }   }   bool is_line(int a, int b, int c) {     int x1 = px[b] - px[a];     int x2 = px[c] - px[a];     int y1 = py[b] - py[a];     int y2 = py[c] - py[a];     return (long long)x1 * y2 - (long long)x2 * y1 == 0;   }   