func_code_string: #include <bits/stdc++.h>   using namespace std;   int c[1100000], v[1100000], w[1100000], n, K, s1[1100000], s2[1100000], len1,       len2, pre1, pre2;   void insert(int k) {     while (len1 >= pre1 && v[s1[len1]] <= v[k]) len1--;     s1[++len1] = k;     while (len2 >= pre2 && c[s2[len2]] >= c[k]) len2--;     s2[++len2] = k;   }   int main() {     scanf( %d%d , &n, &K);     for (int i = 1; i <= n; i++) scanf( %d , &v[i]);     for (int i = 1; i <= n; i++) scanf( %d , &c[i]);     pre1 = 1;     pre2 = 1;     len1 = 1;     len2 = 1;     int now = 1;     s1[1] = 1;     s2[1] = 1;     for (int i = 1; i <= n; i++) {       if (now < i) insert(i), now++;       while (s1[pre1] < i) pre1++;       while (s2[pre2] < i) pre2++;       while (now < n) {         int k1 = v[s1[pre1]], k2 = c[s2[pre2]];         if (k1 * 100 >= k2) break;         k1 = max(k1, v[now + 1]);         k2 = min(k2, c[now + 1]);         if (k1 * 100 < k2) {           insert(now + 1);           now++;         } else           break;       }       int k1 = v[s1[pre1]], k2 = c[s2[pre2]];       w[i] = min(k1 * 100, k2);       if (now != n) {         k1 = max(k1, v[now + 1]);         k2 = min(k2, c[now + 1]);         w[i] = max(w[i], min(k1 * 100, k2));       }     }     sort(w + 1, w + n + 1);     double ans = 0, noww = (double)K / (double)n;     for (int i = 1; i <= n - K + 1; i++) {       ans = ans + w[i] * noww;       int k1 = n - K + 1 - i, k2 = n - i;       noww = noww * k1 / k2;     }     printf( %.11lf n , ans);     return 0;   }   