Submission #1204290


Source Code Expand

#include<iostream>
using namespace std;

#define BI ss3[t]

char dc[] = {'R', 'L', 'U', 'D'};
int ddi[128] = {};

int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};

int h,w,k,sr,sc;
int b[50][50] = {};
int o[50][50] = {};
int bd[50][50] = {};
int n;
bool bi[2500] = {};
long long ss1[2500] = {};
int ssi[2500] = {};
int ssj[2500] = {};
bool ss3[2500][2500] = {};
string ss4[2500] = {};


int search(int t){
  long long s = ss1[t];
  if(t>0 && s == 0) return t;
  char f[50][50] = {};
  int i = ssi[t];
  int j = ssj[t];
  int kt = 0;
  for(int k; k<2500; k++){
    if(BI[k]) kt++;
  }
  if(kt == 2500) return 0;
  long long qs[2500] = {};
  int qi[2500] = {};
  int qj[2500] = {};
  qs[0] = s;
  qi[0] = i;
  qj[0] = j;
  int qm = 1;
  int qmi = 1;
  f[i][j] = '-';
  int ck = t;
  for(int qt=0; qt<qm; qt++){
    if(qt==qmi){
      ck++;
      qmi = qm;
    }
    s = qs[qt];
    int r = qi[qt];
    int c = qj[qt];
    for(int di=0; di<4; di++){
      char nk = dc[di];
      int nr = r + dx[di];
      int nc = c + dy[di];
      if(b[nr][nc] < 0 || f[nr][nc]) continue;
      if(b[nr][nc] == 0 || BI[bd[nr][nc]]){
        qs[qm] = s;
        qi[qm] = nr;
        qj[qm] = nc;
        f[nr][nc] = nk;
        qm++;
        continue;
      }
      long long ns = s + b[nr][nc] - o[nr][nc] * (ck+1);
      if(ss1[ck+1] >= ns) continue;

      memcpy(ss3[ck+1], BI, 2500);
      ss3[ck+1][bd[nr][nc]] = true;
      f[nr][nc] = nk;
      char ct = nk;
      int mi = nr;
      int mj = nc;
      string st = "";
      while(ct != '-'){
        int ndi = ddi[ct];
        st = ct + st;
        mi -= dx[ndi];
        mj -= dy[ndi];
        ct = f[mi][mj];
      }
      ss1[ck+1] = ns;
      ssi[ck+1] = nr;
      ssj[ck+1] = nc;
      ss4[ck+1] = st;
    }
  }
  return 0;
}


int main(){
  ddi['R'] = 0;
  ddi['L'] = 1;
  ddi['U'] = 2;
  ddi['D'] = 3;

  cin >> h >> w >> k >> sr >> sc;
  sr--;
  sc--;

  string s;
  for(int i=0; i<h; i++){
    cin >> s;
    for(int j=0; j<w; j++){
      if(s[j] != '.'){
        b[i][j] = -1;
      }
    }
  }

  cin >> n;

  for(int i=0; i<n; i++){
    int r,c,f,g;
    cin >> r >> c >> f >> g;
    r--;
    c--;
    b[r][c] = f;
    o[r][c] = g;
    bd[r][c] = i;
  }

  s = "";
  ss1[0] = 0;
  ssi[0] = sr;
  ssj[0] = sc;
  memcpy(ss3[0], bi, 2500);

  long long mc = 0;
  int mi = -1;
  for(int ki=0; ki<k; ki++){
    if(mi+100 < ki) break;
    if(ss1[ki] > mc){
      mc = ss1[ki];
      mi = ki;
    }
    search(ki);
  }

  // cout << mi << ',' << mc << "\n";
  int nmi = 2500 - mi;
  string r = "";
  while(mi>0){
    r = ss4[mi] + r;
    mi -= ss4[mi].size();
  }
  cout << r;
  for(int i=0; i<nmi; i++){
    cout << '-';
  }
  cout << '\n';
  return 0;
}

Submission Info

Submission Time
Task A - Multiple Pieces
User iehn
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2859 Byte
Status CE

Compile Error

./Main.cpp: In function ‘int search(int)’:
./Main.cpp:70:33: error: ‘memcpy’ was not declared in this scope
       memcpy(ss3[ck+1], BI, 2500);
                                 ^
./Main.cpp: In function ‘int main()’:
./Main.cpp:130:26: error: ‘memcpy’ was not declared in this scope
   memcpy(ss3[0], bi, 2500);
                          ^