Submission #165397

#TimeUsernameProblemLanguageResultExecution timeMemory
165397sansJetpack (COCI16_jetpack)C++14
0 / 80
27 ms1784 KiB
#include <iostream>
#include <numeric>
#include <cmath>
#include <algorithm>
#include <vector>

using namespace std;

#define sp ' '
#define st first
#define nd second
#define pb push_back
#define mp make_pair
#define forn(YY, yy) for(long long int yy = 0; yy < YY; ++yy)
#define prn(XX) cout << XX << endl
#define prs(XX) cout << XX << " "

typedef long long int ll;
typedef unsigned long long int ull;
typedef vector<ll> vll;
typedef vector<vector<ll>> vvll;
typedef pair<ll, ll> pll;
typedef vector<pll> vpll;

const int MOD = 1e9 + 7;
const int INF = 2e9 + 13;
const int mINF = -2e9 - 13;
const double PI = 3.14159265358979;
const double EPS = 1e-9;


#define UC   1
#define DUS  2
#define YURU 3
#define TAVAN 4

vector<vector<bool>> field; int N;
vector<pair<int, int>> ans;

bool oldu = false;
void simulate(int r, int c, int t, int x, int Mode, int timer){
    if(field[r][c]) return;
    //cout << r << sp << c << sp << (Mode == 3 ? "YURU" : (Mode == 1 ? "UC" : "DUS")) << endl;
    if(c == N){ oldu = true; if(Mode == UC) ans.pb(mp(t, x)); return; }

    if(r <= 0){
        simulate(r, c+1, t, x+1, UC, timer+1);
        if(oldu) return;

        ans.pb(mp(t, x));
        simulate(r+1, c+1, -1, -1, DUS, timer+1); if(!oldu) ans.pop_back();
        
        return; 
    }

    if(Mode == UC){
        simulate(r-1, c+1, t, x+1, UC, timer+1);
        if(oldu) return;
        
        ans.pb(mp(t, x));
        simulate(r+1, c+1, -1, -1, DUS, timer+1);
        if(oldu) return;
    }
    if(Mode == DUS){
        simulate(r+1, c+1, -1, -1, DUS, timer+1);
        if(oldu) return;

        simulate(r-1, c+1, timer, 1, UC, timer+1);
        if(oldu) return;
    }
    if(Mode == YURU){
        simulate(r, c+1, -1, -1, YURU, timer+1);
        if(oldu) return;

        simulate(r-1, c+1, timer, 1, UC, timer+1);
        if(oldu) return;
    }
    return;
}

int main(int argc, char **argv){
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    cin >> N;
    field.resize(10, vector<bool>(N));

    for(int i = 0; i < 10; ++i){
        for(int j = 0; j < N; ++j){
            char c; cin >> c;
            field[i][j] = (c == 'X');
        }
    }
    
    simulate(9, 0, -1, -1, YURU, 0);
    cout << endl;
    //cout << oldu << endl;
    for(int i = 0; i < (int)ans.size(); ++i){
        cout << ans[i].st << sp << ans[i].nd << endl;
    }

    return 0;
}

//cikisir
#Verdict Execution timeMemoryGrader output
Fetching results...