#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; } |
English