#include <bits/stdc++.h>   #pragma GCC optimize( O3 )   using namespace std;   template <class T>   using pq = priority_queue<T>;   template <class T>   using pqg = priority_queue<T, vector<T>, greater<T>>;   int scan() { return getchar(); }   void scan(int& a) { cin >> a; }   void scan(long long& a) { cin >> a; }   void scan(char& a) { cin >> a; }   void scan(double& a) { cin >> a; }   void scan(long double& a) { cin >> a; }   void scan(char a[]) { scanf( %s , a); }   void scan(string& a) { cin >> a; }   template <class T>   void scan(vector<T>&);   template <class T, size_t size>   void scan(array<T, size>&);   template <class T, class L>   void scan(pair<T, L>&);   template <class T, size_t size>   void scan(T (&)[size]);   template <class T>   void scan(vector<T>& a) {     for (auto& i : a) scan(i);   }   template <class T>   void scan(deque<T>& a) {     for (auto& i : a) scan(i);   }   template <class T, size_t size>   void scan(array<T, size>& a) {     for (auto& i : a) scan(i);   }   template <class T, class L>   void scan(pair<T, L>& p) {     scan(p.first);     scan(p.second);   }   template <class T, size_t size>   void scan(T (&a)[size]) {     for (auto& i : a) scan(i);   }   template <class T>   void scan(T& a) {     cin >> a;   }   void IN() {}   template <class Head, class... Tail>   void IN(Head& head, Tail&... tail) {     scan(head);     IN(tail...);   }   string stin() {     string s;     cin >> s;     return s;   }   template <class T>   inline bool chmax(T& a, T b) {     if (a < b) {       a = b;       return 1;     }     return 0;   }   template <class T>   inline bool chmin(T& a, T b) {     if (a > b) {       a = b;       return 1;     }     return 0;   }   vector<int> iota(int n) {     vector<int> a(n);     iota(begin(a), end(a), 0);     return a;   }   template <class T>   void UNIQUE(vector<T>& x) {     sort(begin(x), end(x));     x.erase(unique(begin(x), end(x)), x.end());   }   int in() {     int x;     cin >> x;     return x;   }   long long lin() {     unsigned long long x;     cin >> x;     return x;   }   void print() { putchar(   ); }   void print(bool a) { cout << a; }   void print(int a) { cout << a; }   void print(long long a) { cout << a; }   void print(char a) { cout << a; }   void print(string& a) { cout << a; }   void print(double a) { cout << a; }   template <class T>   void print(const vector<T>&);   template <class T, size_t size>   void print(const array<T, size>&);   template <class T, class L>   void print(const pair<T, L>& p);   template <class T, size_t size>   void print(const T (&)[size]);   template <class T>   void print(const vector<T>& a) {     if (a.empty()) return;     print(a[0]);     for (auto i = a.begin(); ++i != a.end();) {       cout <<    ;       print(*i);     }     cout << endl;   }   template <class T>   void print(const deque<T>& a) {     if (a.empty()) return;     print(a[0]);     for (auto i = a.begin(); ++i != a.end();) {       cout <<    ;       print(*i);     }   }   template <class T, size_t size>   void print(const array<T, size>& a) {     print(a[0]);     for (auto i = a.begin(); ++i != a.end();) {       cout <<    ;       print(*i);     }   }   template <class T, class L>   void print(const pair<T, L>& p) {     cout <<  ( ;     print(p.first);     cout <<  , ;     print(p.second);     cout <<  ) ;   }   template <class T>   void print(set<T>& x) {     for (auto e : x) print(e), cout <<    ;     cout << endl;   }   template <class T, size_t size>   void print(const T (&a)[size]) {     print(a[0]);     for (auto i = a; ++i != end(a);) {       cout <<    ;       print(*i);     }   }   template <class T>   void print(const T& a) {     cout << a;   }   int out() {     putchar(  n );     return 0;   }   template <class T>   int out(const T& t) {     print(t);     putchar(  n );     return 0;   }   template <class Head, class... Tail>   int out(const Head& head, const Tail&... tail) {     print(head);     putchar(   );     out(tail...);     return 0;   }   long long gcd(long long a, long long b) {     while (b) {       long long c = b;       b = a % b;       a = c;     }     return a;   }   long long lcm(long long a, long long b) {     if (!a || !b) return 0;     return a * b / gcd(a, b);   }   vector<pair<long long, long long>> factor(long long x) {     vector<pair<long long, long long>> ans;     for (long long i = 2; i * i <= x; i++)       if (x % i == 0) {         ans.push_back({i, 1});         while ((x /= i) % i == 0) ans.back().second++;       }     if (x != 1) ans.push_back({x, 1});     return ans;   }   vector<int> divisor(int x) {     vector<int> ans;     for (int i = 1; i * i <= x; i++)       if (x % i == 0) {         ans.push_back(i);         if (i * i != x) ans.push_back(x / i);       }     return ans;   }   int popcount(long long x) { return __builtin_popcountll(x); }   mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());   int rnd(int n) { return uniform_int_distribution<int>(0, n - 1)(rng); }   template <class... T>   void err(const T&...) {}   struct Setup_io {     Setup_io() {       ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);       cout << fixed << setprecision(15);     }   } setup_io;   double d(long long x, long long y) {     return sqrt((long double)x * (long double)x +                 (long double)y * (long double)y);   }   double d(pair<int, int> x) { return d(x.first, x.second); }   int main() {     int n, k;     IN(n, k);     map<pair<int, int>, vector<pair<int, int>>> mp;     for (long long i = 0; i < n; ++i) {       long long a, b;       IN(a, b);       if (!a and !b) continue;       if (b < 0 or (b == 0 and a <= 0)) {         long long g = gcd(a, b);         g = abs(g);         mp[{a / g, b / g}].emplace_back(abs(a), abs(b));       } else {         long long g = gcd(a, b);         g = abs(g);         mp[{a / g, b / g}].emplace_back(abs(a), abs(b));       }     }     vector<long double> ans{0};     bool flag = false;     for (auto [e, v] : mp) {       sort(begin(v), end(v), greater<pair<int, int>>());       if (v.size() > k / 2) {         for (long long i = 0; i < k / 2; ++i) {           long double D = d(v[i]);           ans.emplace_back(D * (k - 1 - i * 2));         }         int c = k / 2;         long double dist = 0;         for (long long i = v.size() - 1; i >= c; --i) {           long double D = d(v[i]);           ans.emplace_back(D * (k - 1 - c * 2) - dist);           dist += D * 2;         }       } else         for (long long i = 0; i < v.size(); ++i) {           long double D = d(v[i]);           ans.emplace_back(D * (k - 1 - i * 2));         }     }     sort(begin(ans), end(ans), greater<long double>());     long double sum = 0;     for (long long i = 0; i < k; ++i) sum += ans[i];     cout << sum <<   n ;   }