답안 #536686

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
536686 2022-03-13T20:52:11 Z ali22413836 Jetpack (COCI16_jetpack) C++14
8 / 80
20 ms 4180 KB
#include <bits/stdc++.h>
#define  endl "\n"
using namespace std ;
typedef long long ll;
typedef long double ld ;
const int N=2e7;
const ll inf=1e18 ;
const ll mod = 1e9 + 7 ;
ll mypower(ll x, ll y){
    if(y == 0) return 1 ;
    if(y == 1) return x ;
    ll ret = mypower(x , y / 2);
    ret = (ret * ret) % mod;
    if(y % 2) ret = ( ret * x ) % mod ;
    return ret ;
}
ll n ;
char a[20][100009] ;
bool is2[20][100009] , is[20][100009] ;
vector < pair < ll , ll > > ans ;
ll la ;
void sol(ll i , ll j , ll ti , ll len , ll iss){
    a[i][j] = '*' ;
    if(iss == 0){
        if(j == n - 1){
            return ;
        }
        if(is2[i][j] && a[i - 1][j + 1] != 'X'){
            la = ti ;
            sol(i - 1 , j + 1 , ti + 1 , len + 1 , 1) ;
        }
        else{
            sol(i , j + 1 , ti + 1 , len , 0) ;
        }
    }
    else if(iss == 1){
        if(j == n - 1){
            ans.push_back({la , len}) ;
            return ;
        }
        if(is[i][j] && a[i + 1][j + 1] != 'X'){
            ans.push_back({la , len}) ;
            la = 0 ;
            sol(i + 1 , j + 1 , ti + 1 , 0 , 2) ;
        }
        else if(i != 0 && a[i - 1][j + 1] != 'X'){
            sol(i - 1 , j + 1 , ti + 1 , len + 1 , 1) ;
        }
        else{
            sol(i , j + 1 , ti + 1 , len + 1 ,1) ;
        }
    }
    else{
        if(j == n - 1){
            return ;
        }
        if(is2[i][j] && a[i - 1][j + 1] != 'X'){
            la = ti ;
            sol(i - 1 , j + 1 , ti + 1 , len + 1 , 1) ;
        }
        else if(i != 9 && a[i + 1][j + 1] !='X'){
            sol(i + 1 ,j + 1 , ti + 1 , 0 , 2) ;
        }
        else if(i == 9 && a[i][j + 1] != 'X'){
            sol(i , j + 1 , ti + 1 , 0 , 2) ;
        }
    }
}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin >> n ;
    for(int j = 0 ; j < 10 ; j++){
        for(int i = 0 ; i < n ; i++){
            cin >> a[j][i] ;
        }
    }
    is[0][n - 1] = is[9][n - 1] = 1 ;
    is2[0][n - 1] = is2[9][n - 1] = 1 ;
    for(int i = n - 1 ; i >= 0 ; i--){
        is2[0][i] |= is2[0][i + 1] ;
        is[0][i] |= is[0][i + 1] ;
        is2[9][i] |= is2[9][i + 1] ;
        is[9][i] |= is[9][i + 1] ;
    }
    for(int j = n - 1 ; j >= 0 ; j--){
        for(int i = 9 ; i >= 0 ; i--){
            if(j == n - 1 && a[i][j] == '.'){
                is[i][j] = is2[i][j] = 1 ;
                continue ;
            }
            if(a[i][j] == 'X'){
                continue ;
            }
            is[i][j] = is[i + 1][j + 1] | is2[i + 1][j + 1] ;
            is2[i][j] = is2[i - 1][j + 1] | is[i - 1][j + 1] ;
        }
    }
    ll x = 9 , y = 0 , ti = 0 , len = 0 ;
    sol(x , y , ti , len , 0) ;
    cout << ans.size() << endl ;
    for(auto p : ans){
        cout << p.first << " " << p.second << endl ;
    }
//    for(int i = 0 ; i < 10 ;i++){
//        for(int j = 0 ; j< n ;j++){
//            cout << a[i][j] ;
//        }
//        cout << endl ;
//    }
//    cout << a[9][0] << endl ;
    return 0 ;
}
		
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Crashed with an obstacle
2 Correct 0 ms 340 KB Output is correct
3 Incorrect 1 ms 340 KB Crashed with an obstacle
4 Incorrect 1 ms 464 KB Crashed with an obstacle
5 Incorrect 1 ms 596 KB Crashed with an obstacle
6 Incorrect 2 ms 596 KB Crashed with an obstacle
7 Incorrect 4 ms 1108 KB Crashed with an obstacle
8 Incorrect 9 ms 2216 KB Crashed with an obstacle
9 Incorrect 14 ms 3156 KB Crashed with an obstacle
10 Incorrect 20 ms 4180 KB Crashed with an obstacle