// 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"; } } |