LeetCode Weekly Contest 156 4問目 - Minimum Moves to Reach Target with Rotations [1210]

Source

LeetCode Weekly Contest 156
問題文

問題概要

省略

解法

省略

cLayversion 20191006-1)のコード

C++に変換後のコードはこちら

#define main dummy_main
{}
#undef main

int N;
int q[20000], qs, qe;
int d[2][100][100];
int ok[2][100][100];

class Solution {
public:
  int minimumMoves(vector<vector<int>>& mp) {
    int i, j, k, mask, ni, nj, nk, r;
    dimcomp3 c;
    N = mp.size();
    c.set(2,N,N);

    rep(k,2) rep(i,N) rep(j,N) d[k][i][j] = -1;
    d[0][0][0] = 0;
    qs = qe = 0;
    q[qe++] = 0;

    rep(i,N) rep(j,N) ok[0][i][j] = ok[1][i][j] = 0;
    rep(i,N) rep(j,N-1) if(mp[i][j]==mp[i][j+1]==0) ok[0][i][j] = 1;
    rep(i,N-1) rep(j,N) if(mp[i][j]==mp[i+1][j]==0) ok[1][i][j] = 1;

    while(qs < qe){
      mask = q[qs++];
      c(mask,k,i,j);

      rep(r,3){
        nk = if[r==0, k^1, k];
        ni = if[r==1, i+1, i];
        nj = if[r==2, j+1, j];
        if(ni >= N || nj >= N) continue;
        if(ok[nk][ni][nj] && d[nk][ni][nj]==-1){
          if(r==0 && mp[ni+1][nj+1]==1) continue;
          d[nk][ni][nj] = d[k][i][j] + 1;
          q[qe++] = c(nk,ni,nj);
        }
      }
    }

    return d[0][N-1][N-2];
  }
};

Current time: 2024年04月25日08時52分15秒
Last modified: 2019年10月06日03時37分38秒 (by laycrs)
Tags: Competitive_Programming_Incomplete LeetCode
トップページに戻る

Logged in as: unknown user (not login)

ログイン: