#include "bits/stdc++.h"
using namespace std;
using ll = long long;
void algosia() {
ll n, t;
cin >> n >> t;
while (t--) {
vector <vector <int>> v(10, vector <int>(10, 0));
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 4; j++) {
v[i][j] = ((i >> j)&1);
}
}
for (int j = 4; j < 10; j++) {
for (int i = 0; i < 3; i++) {
v[i][j] = (((j - 4) >> i)&1);
}
}
cin >> n;
for (int i = 9; i >= 3; i--) {
for (int j = 9; j >= 4; j--) {
v[i][j] = (n&1);
n >>= 1;
}
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
cout << v[i][j];
}
cout << endl;
}
}
}
void bajtek() {
ll n, t;
cin >> n >> t;
while (t--) {
vector <vector <int>> v(10, vector <int>(10));
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
char c;
cin >> c;
v[i][j] = (c - '0');
}
}
bool good = false;
vector <vector <int>> tmp(10, vector <int>(10));
for (int i = 0; i < 10 && !good; i++) {
for (int j = 0; j < 10 && !good; j++) {
for (int k = 0; k < 10 && !good; k++) {
for (int m = 0; m < 10 && !good; m++) {
if (i == j || j == k || i == k || i == m || j == m || k == m) continue;
vector <int> num(11, -1);
for (int y = 0; y < 10; y++) {
int x = v[y][i] + 2 * v[y][j] + 4 * v[y][k] + 8 * v[y][m];
if (x <= 10) num[x] = y;
}
bool check = true;
for (int x = 0; x < 10; x++) {
if (num[x] == -1) check = false;
}
if (check) {
int cnt = 0;
for (int x = 0; x < 10; x++) cnt += v[num[0]][x];
if (cnt != 3) check = false;
cnt = 0;
for (int x = 0; x < 10; x++) cnt += v[num[1]][x];
if (cnt != 3) check = false;
cnt = 0;
for (int x = 0; x < 10; x++) cnt += v[num[2]][x];
if (cnt != 3) check = false;
}
if (check) good = true;
if (good) {
for (int y = 0; y < 10; y++) {
tmp[y][0] = v[y][i];
tmp[y][1] = v[y][j];
tmp[y][2] = v[y][k];
tmp[y][3] = v[y][m];
}
int left = 0;
for (int c = 4; c < 10; c++) {
while (left == i || left == j || left == k || left == m) left++;
for (int y = 0; y < 10; y++) {
tmp[y][c] = v[y][left];
}
left++;
}
v = tmp;
}
}
}
}
}
vector <pair <int, int>> order;
for (int i = 0; i < 10; i++) {
order.push_back({v[i][0] + 2 * v[i][1] + 4 * v[i][2] + 8 * v[i][3], i});
}
sort(order.begin(), order.end());
tmp = v;
for (int i = 0; i < 10; i++) {
v[i] = tmp[order[i].second];
}
order.clear();
for (int j = 4; j < 10; j++) {
order.push_back({v[0][j] + 2 * v[1][j] + 4 * v[2][j], j});
}
sort(order.begin(), order.end());
tmp = v;
for (int j = 4; j < 10; j++) {
for (int i = 0; i < 10; i++) {
v[i][j] = tmp[i][order[j - 4].second];
}
}
ll ans = 0, cur = 0;
for (int i = 3; i < 10; i++) {
for (int j = 4; j < 10; j++) {
ans *= 2;;
ans += v[i][j];
}
}
cout << ans << endl;
}
}
int main() {
string name;
cin >> name;
if (name == "Algosia") algosia();
else bajtek();
}
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 136 137 138 139 140 141 142 143 144 145 146 147 148 | #include "bits/stdc++.h" using namespace std; using ll = long long; void algosia() { ll n, t; cin >> n >> t; while (t--) { vector <vector <int>> v(10, vector <int>(10, 0)); for (int i = 0; i < 10; i++) { for (int j = 0; j < 4; j++) { v[i][j] = ((i >> j)&1); } } for (int j = 4; j < 10; j++) { for (int i = 0; i < 3; i++) { v[i][j] = (((j - 4) >> i)&1); } } cin >> n; for (int i = 9; i >= 3; i--) { for (int j = 9; j >= 4; j--) { v[i][j] = (n&1); n >>= 1; } } for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { cout << v[i][j]; } cout << endl; } } } void bajtek() { ll n, t; cin >> n >> t; while (t--) { vector <vector <int>> v(10, vector <int>(10)); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { char c; cin >> c; v[i][j] = (c - '0'); } } bool good = false; vector <vector <int>> tmp(10, vector <int>(10)); for (int i = 0; i < 10 && !good; i++) { for (int j = 0; j < 10 && !good; j++) { for (int k = 0; k < 10 && !good; k++) { for (int m = 0; m < 10 && !good; m++) { if (i == j || j == k || i == k || i == m || j == m || k == m) continue; vector <int> num(11, -1); for (int y = 0; y < 10; y++) { int x = v[y][i] + 2 * v[y][j] + 4 * v[y][k] + 8 * v[y][m]; if (x <= 10) num[x] = y; } bool check = true; for (int x = 0; x < 10; x++) { if (num[x] == -1) check = false; } if (check) { int cnt = 0; for (int x = 0; x < 10; x++) cnt += v[num[0]][x]; if (cnt != 3) check = false; cnt = 0; for (int x = 0; x < 10; x++) cnt += v[num[1]][x]; if (cnt != 3) check = false; cnt = 0; for (int x = 0; x < 10; x++) cnt += v[num[2]][x]; if (cnt != 3) check = false; } if (check) good = true; if (good) { for (int y = 0; y < 10; y++) { tmp[y][0] = v[y][i]; tmp[y][1] = v[y][j]; tmp[y][2] = v[y][k]; tmp[y][3] = v[y][m]; } int left = 0; for (int c = 4; c < 10; c++) { while (left == i || left == j || left == k || left == m) left++; for (int y = 0; y < 10; y++) { tmp[y][c] = v[y][left]; } left++; } v = tmp; } } } } } vector <pair <int, int>> order; for (int i = 0; i < 10; i++) { order.push_back({v[i][0] + 2 * v[i][1] + 4 * v[i][2] + 8 * v[i][3], i}); } sort(order.begin(), order.end()); tmp = v; for (int i = 0; i < 10; i++) { v[i] = tmp[order[i].second]; } order.clear(); for (int j = 4; j < 10; j++) { order.push_back({v[0][j] + 2 * v[1][j] + 4 * v[2][j], j}); } sort(order.begin(), order.end()); tmp = v; for (int j = 4; j < 10; j++) { for (int i = 0; i < 10; i++) { v[i][j] = tmp[i][order[j - 4].second]; } } ll ans = 0, cur = 0; for (int i = 3; i < 10; i++) { for (int j = 4; j < 10; j++) { ans *= 2;; ans += v[i][j]; } } cout << ans << endl; } } int main() { string name; cin >> name; if (name == "Algosia") algosia(); else bajtek(); } |
English