#include <bits/stdc++.h> using namespace std; typedef long long int lli; const int MAX = 250005; const lli INF = 1000005; lli x[MAX], y[MAX]; lli xp[MAX], yp[MAX]; int main() { srand(time(0)); int n; scanf("%d", &n); for (int i=0; i<n; i++) { scanf("%lld%lld", &x[i], &y[i]); // x[i] = rand()%10; // y[i] = rand()%10; } vector<int> v; for (int i=0; i<n; i++) v.push_back(i); for (int rem = 0; rem < n; rem++) { lli res = 0; // random_shuffle(v.begin(), v.end()); for (int i=0; i<n; i++) { xp[i] = x[v[i]]; yp[i] = y[v[i]]; } for (int i=0; i<n; i++) { if (i == rem) continue; for (int j=0; j<n; j++) { if (j == rem) continue; if (xp[i] != xp[j]) { // printf(" %lld %lld, %lld\n", xp[j], xp[i], (xp[i]-xp[j])/abs(xp[i]-xp[j])); xp[j] += (xp[i]-xp[j])/abs(xp[i]-xp[j]); } if (yp[i] != yp[j]) { yp[j] += (yp[i]-yp[j])/abs(yp[i]-yp[j]); } } } // vector<int> rev; // rev.resize(n+5); // // for (int i=0; i<n; i++) { // rev[v[i]] = i; // } // for (int i=0; i<n; i++) // printf("(%lld %lld)", x[v[i]], y[v[i]]); // printf("\n"); // for (int i=0; i<n; i++) // printf("(%lld %lld)", xp[rev[i]]-xp[rev[0]], yp[rev[i]]-yp[rev[0]]); // printf("\n\n"); // break; for (int i=0; i<n; i++) { res += xp[i]*yp[i]; } printf("%lld\n", res); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <bits/stdc++.h> using namespace std; typedef long long int lli; const int MAX = 250005; const lli INF = 1000005; lli x[MAX], y[MAX]; lli xp[MAX], yp[MAX]; int main() { srand(time(0)); int n; scanf("%d", &n); for (int i=0; i<n; i++) { scanf("%lld%lld", &x[i], &y[i]); // x[i] = rand()%10; // y[i] = rand()%10; } vector<int> v; for (int i=0; i<n; i++) v.push_back(i); for (int rem = 0; rem < n; rem++) { lli res = 0; // random_shuffle(v.begin(), v.end()); for (int i=0; i<n; i++) { xp[i] = x[v[i]]; yp[i] = y[v[i]]; } for (int i=0; i<n; i++) { if (i == rem) continue; for (int j=0; j<n; j++) { if (j == rem) continue; if (xp[i] != xp[j]) { // printf(" %lld %lld, %lld\n", xp[j], xp[i], (xp[i]-xp[j])/abs(xp[i]-xp[j])); xp[j] += (xp[i]-xp[j])/abs(xp[i]-xp[j]); } if (yp[i] != yp[j]) { yp[j] += (yp[i]-yp[j])/abs(yp[i]-yp[j]); } } } // vector<int> rev; // rev.resize(n+5); // // for (int i=0; i<n; i++) { // rev[v[i]] = i; // } // for (int i=0; i<n; i++) // printf("(%lld %lld)", x[v[i]], y[v[i]]); // printf("\n"); // for (int i=0; i<n; i++) // printf("(%lld %lld)", xp[rev[i]]-xp[rev[0]], yp[rev[i]]-yp[rev[0]]); // printf("\n\n"); // break; for (int i=0; i<n; i++) { res += xp[i]*yp[i]; } printf("%lld\n", res); } return 0; } |