// moz.cpp
// version 1
//
// Autor: Jakub Chmist
// Utworzony 22.11.2017.
#include <iostream>
#include <algorithm>
typedef long long LL;
using namespace std;
struct mozaika {
LL nr;
LL x;
LL y;
LL bok_x;
LL bok_y;
LL powierzchnia;
bool ograniczony_x;
bool ograniczony_y;
};
bool comp_X(mozaika A, mozaika B) {
return A.x<B.x;
}
bool comp_Y(mozaika A, mozaika B) {
return A.y<B.y;
}
bool comp_nr(mozaika A, mozaika B) {
return A.nr<B.nr;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int t, n;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> n;
LL powierzchnia_p = 0, suma_x = 0, suma_y = 0, suma_powierzchni = 0;
LL min_x = 1000000000000000001, min_y = 1000000000000000001;
struct mozaika t_mozaika[n];
for (int i = 0; i < n; i++) {
cin >> t_mozaika[i].x;
cin >> t_mozaika[i].y;
t_mozaika[i].nr = i;
if (min_x > t_mozaika[i].x) min_x= t_mozaika[i].x;
if (min_y > t_mozaika[i].y) min_y= t_mozaika[i].y;
}
sort(t_mozaika, t_mozaika + n, comp_X);
for (int i = 0; i < n; i++) {
t_mozaika[i].bok_x = t_mozaika[i+1].x - t_mozaika[i].x;
if (t_mozaika[i].bok_x<=0) {
t_mozaika[i].bok_x = 0;
} else {
t_mozaika[i].bok_y = t_mozaika[i].bok_x;
}
}
sort(t_mozaika, t_mozaika + n, comp_Y);
for (int i = 0; i < n; i++) {
t_mozaika[i].bok_y = t_mozaika[i+1].y - t_mozaika[i].y;
if (t_mozaika[i].bok_x == 0) t_mozaika[i].bok_x = t_mozaika[i].bok_y;
// if (t_mozaika[i].x != t_mozaika[i].y) outn();
// t_mozaika[i].powierzchnia = t_mozaika[i].bok_y * t_mozaika[i].bok_y;
// suma_powierzchni += t_mozaika[i].powierzchnia;
}
for (int i = 0; i < n; i++) {
if (t_mozaika[i].y == min_y) suma_x += t_mozaika[i].bok_x;
}
// for (int i = 0; i < n; i++) {
// if (t_mozaika[i].bok_y == 0) {
// t_mozaika[i].bok_x =suma_x;
// t_mozaika[i].bok_y =suma_x;
// }
// }
for (int i = 0; i < n; i++) {
if (t_mozaika[i].bok_x == min_x) suma_y += t_mozaika[i].bok_y;
}
for (int i = 0; i < n; i++) {
if (t_mozaika[i].bok_x == 0) {
t_mozaika[i].bok_x =suma_y;
t_mozaika[i].bok_y =suma_y;
}
}
for (int i = 0; i < n; i++) {
t_mozaika[i].powierzchnia = t_mozaika[i].bok_y * t_mozaika[i].bok_y;
suma_powierzchni += t_mozaika[i].powierzchnia;
}
for (int i = 0; i < n; i++) {
suma_x += t_mozaika[i].bok_x;
suma_y += t_mozaika[i].bok_y;
}
powierzchnia_p = suma_x * suma_y;
if (powierzchnia_p != suma_powierzchni) {
cout << "Nie\n";
// continue;
}
sort(t_mozaika, t_mozaika + n, comp_nr);
cout << "Tak ";
for (int i = 0; i < n; i++) {
cout << t_mozaika[i].bok_x << " ";
}
cout << "\n";
}
}
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | // moz.cpp // version 1 // // Autor: Jakub Chmist // Utworzony 22.11.2017. #include <iostream> #include <algorithm> typedef long long LL; using namespace std; struct mozaika { LL nr; LL x; LL y; LL bok_x; LL bok_y; LL powierzchnia; bool ograniczony_x; bool ograniczony_y; }; bool comp_X(mozaika A, mozaika B) { return A.x<B.x; } bool comp_Y(mozaika A, mozaika B) { return A.y<B.y; } bool comp_nr(mozaika A, mozaika B) { return A.nr<B.nr; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t, n; cin >> t; for (int i = 0; i < t; i++) { cin >> n; LL powierzchnia_p = 0, suma_x = 0, suma_y = 0, suma_powierzchni = 0; LL min_x = 1000000000000000001, min_y = 1000000000000000001; struct mozaika t_mozaika[n]; for (int i = 0; i < n; i++) { cin >> t_mozaika[i].x; cin >> t_mozaika[i].y; t_mozaika[i].nr = i; if (min_x > t_mozaika[i].x) min_x= t_mozaika[i].x; if (min_y > t_mozaika[i].y) min_y= t_mozaika[i].y; } sort(t_mozaika, t_mozaika + n, comp_X); for (int i = 0; i < n; i++) { t_mozaika[i].bok_x = t_mozaika[i+1].x - t_mozaika[i].x; if (t_mozaika[i].bok_x<=0) { t_mozaika[i].bok_x = 0; } else { t_mozaika[i].bok_y = t_mozaika[i].bok_x; } } sort(t_mozaika, t_mozaika + n, comp_Y); for (int i = 0; i < n; i++) { t_mozaika[i].bok_y = t_mozaika[i+1].y - t_mozaika[i].y; if (t_mozaika[i].bok_x == 0) t_mozaika[i].bok_x = t_mozaika[i].bok_y; // if (t_mozaika[i].x != t_mozaika[i].y) outn(); // t_mozaika[i].powierzchnia = t_mozaika[i].bok_y * t_mozaika[i].bok_y; // suma_powierzchni += t_mozaika[i].powierzchnia; } for (int i = 0; i < n; i++) { if (t_mozaika[i].y == min_y) suma_x += t_mozaika[i].bok_x; } // for (int i = 0; i < n; i++) { // if (t_mozaika[i].bok_y == 0) { // t_mozaika[i].bok_x =suma_x; // t_mozaika[i].bok_y =suma_x; // } // } for (int i = 0; i < n; i++) { if (t_mozaika[i].bok_x == min_x) suma_y += t_mozaika[i].bok_y; } for (int i = 0; i < n; i++) { if (t_mozaika[i].bok_x == 0) { t_mozaika[i].bok_x =suma_y; t_mozaika[i].bok_y =suma_y; } } for (int i = 0; i < n; i++) { t_mozaika[i].powierzchnia = t_mozaika[i].bok_y * t_mozaika[i].bok_y; suma_powierzchni += t_mozaika[i].powierzchnia; } for (int i = 0; i < n; i++) { suma_x += t_mozaika[i].bok_x; suma_y += t_mozaika[i].bok_y; } powierzchnia_p = suma_x * suma_y; if (powierzchnia_p != suma_powierzchni) { cout << "Nie\n"; // continue; } sort(t_mozaika, t_mozaika + n, comp_nr); cout << "Tak "; for (int i = 0; i < n; i++) { cout << t_mozaika[i].bok_x << " "; } cout << "\n"; } } |
English