#include <bits/stdc++.h> #define ll long long #define pi pair <int,int> #define fi first #define se second using namespace std; int n, k, m, gold, gold_to_take; vector < vector <int> > A(20, vector <int> (20)); pi base; vector <pi> Golds, Rocks; void buy_farmer() { cout << "R FARMER" <<endl; } void end_round() { cout << "=" <<endl; } void end_testcase() { cout << "===" <<endl; } void move(int i0, int j0, int i1, int j1) { cout << "M " << i0 << " " << j0 << " " << i1 << " " << j1 <<endl; } struct farmer { int i = 0, j = 0, str = 0; }; void testcase_gra() { gold_to_take = 0; cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> A[i][j]; if (A[i][j] == 0) base = {i, j}; else if (A[i][j] > 0) { Golds.push_back({i, j}); gold_to_take += A[i][j]; } else Rocks.push_back({i, j}); } } if (Rocks.empty()) { m = n / 2; gold = 200; buy_farmer(); gold -= 100; end_round(); //vector < vector <bool> > Taken(n, vector <bool> (n, false)); vector <farmer> Farmers; farmer far; Farmers.push_back(far); //Taken[0][0] = true; while (gold_to_take > 0) { //cout << gold_to_take <<endl; for (farmer &f : Farmers) { //cout << f.i << " " << f.j << " " << gold_to_take <<endl; if (A[f.i][f.j] > 0) { gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } else { if (f.j+1 < n && f.i % 2 == 0) { move(f.i, f.j, f.i, f.j+1); f.j++; gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } else if (f.j == n-1 && f.i % 2 == 0 && f.i != n-1) { move(f.i, f.j, f.i+1, f.j); f.i++; gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } else if (f.j-1 >= 0 && f.i % 2 == 1) { move(f.i, f.j, f.i, f.j-1); f.j--; gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } else if (f.j == 0 && f.i % 2 == 1 && f.i != n-1) { move(f.i, f.j, f.i+1, f.j); f.i++; gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } } } } for (farmer &f : Farmers) { while (f.i > 0) { move(f.i, f.j, f.i-1, f.j); f.i--; end_round(); } while (f.j > 0) { move(f.i, f.j, f.i, f.j-1); f.j--; end_round(); } } } end_testcase(); Golds.clear(); Rocks.clear(); } int main() { ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); int Z; cin >> Z >> k; while (Z--) { testcase_gra(); } 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 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 | #include <bits/stdc++.h> #define ll long long #define pi pair <int,int> #define fi first #define se second using namespace std; int n, k, m, gold, gold_to_take; vector < vector <int> > A(20, vector <int> (20)); pi base; vector <pi> Golds, Rocks; void buy_farmer() { cout << "R FARMER" <<endl; } void end_round() { cout << "=" <<endl; } void end_testcase() { cout << "===" <<endl; } void move(int i0, int j0, int i1, int j1) { cout << "M " << i0 << " " << j0 << " " << i1 << " " << j1 <<endl; } struct farmer { int i = 0, j = 0, str = 0; }; void testcase_gra() { gold_to_take = 0; cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> A[i][j]; if (A[i][j] == 0) base = {i, j}; else if (A[i][j] > 0) { Golds.push_back({i, j}); gold_to_take += A[i][j]; } else Rocks.push_back({i, j}); } } if (Rocks.empty()) { m = n / 2; gold = 200; buy_farmer(); gold -= 100; end_round(); //vector < vector <bool> > Taken(n, vector <bool> (n, false)); vector <farmer> Farmers; farmer far; Farmers.push_back(far); //Taken[0][0] = true; while (gold_to_take > 0) { //cout << gold_to_take <<endl; for (farmer &f : Farmers) { //cout << f.i << " " << f.j << " " << gold_to_take <<endl; if (A[f.i][f.j] > 0) { gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } else { if (f.j+1 < n && f.i % 2 == 0) { move(f.i, f.j, f.i, f.j+1); f.j++; gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } else if (f.j == n-1 && f.i % 2 == 0 && f.i != n-1) { move(f.i, f.j, f.i+1, f.j); f.i++; gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } else if (f.j-1 >= 0 && f.i % 2 == 1) { move(f.i, f.j, f.i, f.j-1); f.j--; gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } else if (f.j == 0 && f.i % 2 == 1 && f.i != n-1) { move(f.i, f.j, f.i+1, f.j); f.i++; gold_to_take -= min(10, A[f.i][f.j]); A[f.i][f.j] -= min(10, A[f.i][f.j]); end_round(); } } } } for (farmer &f : Farmers) { while (f.i > 0) { move(f.i, f.j, f.i-1, f.j); f.i--; end_round(); } while (f.j > 0) { move(f.i, f.j, f.i, f.j-1); f.j--; end_round(); } } } end_testcase(); Golds.clear(); Rocks.clear(); } int main() { ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); int Z; cin >> Z >> k; while (Z--) { testcase_gra(); } return 0; } |