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
#include <bits/stdc++.h>
using namespace std;
vector <pair <int,int>> farmers;
int main (){
    ios_base::sync_with_stdio(0);
    int T, k;
    cin >> T >> k;
    while (T--){
        int n;
        cin >> n;
        pair <int,int> nil = {-1,-1};
        farmers.resize(n, nil);
        vector <vector <int> > a(n, vector <int> (n, 0)); 
        bool s = 0;
        for(int i = 0; i < n; ++i){
            for(int j = 0; j < n; ++j){
                cin >> a[i][j];
                if(a[i][j] < 0)s = 1;
            }
        }
        int x = 0;//nastepne do wyslania 
        int y = 0;//nastepne do powrotu
        int ert = 0;
        //wracajac zbiera wszystko
        pair <int,int> ret = nil;//zmienia sie na nil gdy osiagnie kolumne ostatnia -> i > 0
        vector <int> ready_to_ret(n, 0);
        bool move = 0;
        int gold = 200;
        int car_gold = 0;
        vector <int> hmg(n, 0);
        if(!s){
            while (y < n || ret != nil){
                //movement
                if(ret == nil && gold >= 100 && x < n){
                    gold -= 100;
                    cout <<"R FARMER\n";
                    farmers[x] = {0,0};
                    ++x;
                }
                move = 0;
                for(int i = 0; i < n; ++i){
                    if(farmers[i].second == 0) move = 1;
                }
                if(ret == nil && move == 0){
                    if(ready_to_ret[y]){
                        ret = farmers[y];
                        car_gold = hmg[y];
                        farmers[y] = nil;
                        ++y;
                    }
                }
                if(ret != nil){
                    int xw = ret.first;
                    int yw = ret.second;
                    if(a[xw][yw] > 0){
                        int w = min(a[xw][yw], 10);
                        a[xw][yw] -= w;
                        car_gold += w;


                    }
                    else if(xw > 0){
                        cout << "M "<< xw << ' ' << yw << ' ' << xw - 1 << ' ' << yw << '\n';
                        ret.first = xw - 1;
                    }
                    else if(yw > 0){
                        cout << "M "<< xw << ' ' << yw << ' ' << xw << ' ' << yw - 1 << '\n';
                        ret.second = yw - 1;
                    }

                    else {
                        gold += car_gold;
                        car_gold = 0;
                        if(x < n){
                            farmers[x] = ret;
                        }
                        else {
                            for(int i = 0; i < n; ++i){
                                if(farmers[i] == nil){
                                    farmers[i] = ret;
                                }
                            }
                        }
                        ret = nil;
                    }
                }

                for(int i = 0; i < n; ++i){
                    if (farmers[i] != nil){
                        int xw = farmers[i].first;
                        int yw = farmers[i].second;
                        if(xw < i){
                            cout << "M "<< xw << ' ' << yw << ' ' << xw + 1 << ' ' << yw << '\n';
                            farmers[i].first = xw + 1;
                        }
                        else {
                            if(a[xw][yw] == 0){
                                if(yw + 1 < n && !ready_to_ret[i]){
                                    cout << "M "<< xw << ' ' << yw << ' ' << xw << ' ' << yw+1 << '\n';
                                    farmers[i].second = yw + 1;
                                }
                                else if (yw == 0){
                                    cout << "M "<< xw << ' ' << yw << ' ' << xw << ' ' << yw+1 << '\n';
                                    farmers[i].second = yw + 1;
                                }
                                else {
                                    ready_to_ret[i] = 1;
                                    if(yw > 1){
                                        cout << "M "<< xw << ' ' << yw << ' ' << xw << ' ' << yw-1 << '\n';
                                        farmers[i].second = yw - 1;
                                    }
                                }
                            }
                            else {
                                int w = min(a[xw][yw], 10);
                                a[xw][yw] -= w;
                                hmg[i] += w;
                            }
                        }
                    }
                }

                cout <<"=\n";
                ert += 1;
            }
            cout <<"===\n";
        }
        cerr << ert << '\n';
    }
}