#include #include #include #include #include #include #include #include #include #define DEBUG1 #ifdef DEBUG #define DBG if (1) #else #define DBG if (0) #endif #define PA(arr, n) DBG for (int i = 0; i < n; i++) printf("%d-%d%c", arr[i].x, arr[i].y, "\n "[i < n - 1]) #define PD(n) DBG printf("%d\n", n); #define PDBL(n) DBG printf("%lf\n", n); using namespace std; struct coor { long long x; long long y; }; bool cmp1(const coor &a, const coor &b) { return a.x+a.y < b.x+b.y; } bool cmp2(const coor &a, const coor &b) { return a.x-a.y < b.x-b.y; } int main () { int n; while(scanf("%d", &n) == 1){ vector arr(n); //vector count(n,0); for (int i = 0; i < n; i++) { scanf("%d", &arr[i].x); scanf("%d", &arr[i].y); } sort(arr.begin(), arr.end(), cmp1); long long count = 0; long long same_count = 0; for(int i = 0; i < n-1; i++) { if(arr[i].x+arr[i].y == arr[i+1].x+ arr[i+1].y){ same_count++; count += same_count; } else { same_count = 0; } } //PA(arr,n); //PD(count); sort(arr.begin(), arr.end(), cmp2); same_count = 0; for(int i = 0; i < n-1; i++) { if(arr[i].x-arr[i].y == arr[i+1].x - arr[i+1].y) { same_count++; count += same_count; } else { same_count = 0; } } //PA(arr,n); //PD(count); /* for(int i = 0; i < n; i++) { for(int j = i+1; j < n; j++) { int x = arr[j].x -arr[i].x; int y = arr[j].y -arr[i].y; if(abs(x) == abs(y)) count++; } }*/ double prob = (long double)(count*2)/(long double)(n*n); printf("%.6lf\n", prob); //PA(arr, n); } return 0; }