Submission #1060689


Source Code Expand

#include <algorithm>
#include <cassert>
#include <cfloat>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <deque>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <vector>

#define FOR(i,k,n) for (int (i)=(k); (i)<(n); ++(i))
#define rep(i,n) FOR(i,0,n)
#define pb push_back
#define all(v) begin(v), end(v)
#define debug(x) cerr<< #x <<": "<<x<<endl
#define debug2(x,y) cerr<< #x <<": "<< x <<", "<< #y <<": "<< y <<endl

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vector<int> > vvi;
typedef vector<ll> vll;
typedef vector<vector<ll> > vvll;
template<class T> using vv=vector<vector< T > >;

struct Point {
  int x;
  int y;
  Point() {};
  Point(int x_, int y_) : x(x_), y(y_) {};
};

vi dx = {1, 0,  0, -1};
vi dy = {0, 1, -1,  0};

int main() {
  int k;
  scanf("%d", &k);
  map<char, int> ctoi;
  ctoi['R'] = 0;
  ctoi['U'] = 1;
  ctoi['L'] = 3;
  ctoi['D'] = 2;
  vi s(k);
  rep (i, k) {
    char tmp;
    scanf(" %c", &tmp);
    s[i] = ctoi[tmp];
  }
  map<vi, vi> mp;
  Point current(0, 0);
  rep (i, k) {
    rep (j, 2) {
      Point p_j, p_j_;
      int j_ = 3 - j;
      vi mpj = mp[{current.x, current.y, j}];
      vi mpj_ = mp[{current.x, current.y, j_}];
      if ((int)mpj.size() == 0) {
        p_j = Point(current.x + dx[j], current.y + dy[j]);
      } else {
        p_j = Point(mpj[0], mpj[1]);
      }
      if ((int)mpj_.size() == 0) {
        p_j_ = Point(current.x + dx[j_], current.y + dy[j_]);
      } else {
        p_j_ = Point(mpj_[0], mpj_[1]);
      }
      mp[{p_j.x, p_j.y, j_}].clear();
      mp[{p_j.x, p_j.y, j_}] = {p_j_.x, p_j_.y};
      mp[{p_j_.x, p_j_.y, j}].clear();
      mp[{p_j_.x, p_j_.y, j}] = {p_j.x, p_j.y};
    }

    vi mpj = mp[{current.x, current.y, s[i]}];
    if ((int)mpj.size() == 0) {
      current = Point(current.x + dx[s[i]], current.y + dy[s[i]]);
    } else {
      current = Point(mpj[0], mpj[1]);
    }
  }
  printf("%d %d\n", current.x, current.y);

  return 0;
}

Submission Info

Submission Time
Task C - 幼稚園児高橋君
User tspcx
Language C++14 (Clang++ 3.4)
Score 100
Code Size 2293 Byte
Status AC
Exec Time 1196 ms
Memory 170272 KB

Judge Result

Set Name Sample Subtask1
Score / Max Score 0 / 0 100 / 100
Status
AC × 3
AC × 24
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt
Subtask1 subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt
Case Name Status Exec Time Memory
subtask0_sample_01.txt AC 18 ms 912 KB
subtask0_sample_02.txt AC 16 ms 796 KB
subtask0_sample_03.txt AC 16 ms 924 KB
subtask1_01.txt AC 16 ms 800 KB
subtask1_02.txt AC 16 ms 800 KB
subtask1_03.txt AC 16 ms 928 KB
subtask1_04.txt AC 18 ms 840 KB
subtask1_05.txt AC 17 ms 756 KB
subtask1_06.txt AC 17 ms 800 KB
subtask1_07.txt AC 849 ms 124192 KB
subtask1_08.txt AC 837 ms 124192 KB
subtask1_09.txt AC 843 ms 122408 KB
subtask1_10.txt AC 827 ms 125988 KB
subtask1_11.txt AC 845 ms 123160 KB
subtask1_12.txt AC 848 ms 122396 KB
subtask1_13.txt AC 872 ms 123844 KB
subtask1_14.txt AC 1196 ms 170268 KB
subtask1_15.txt AC 1049 ms 170272 KB
subtask1_16.txt AC 953 ms 142196 KB
subtask1_17.txt AC 805 ms 170268 KB
subtask1_18.txt AC 1146 ms 170264 KB
subtask1_19.txt AC 808 ms 144928 KB
subtask1_20.txt AC 768 ms 143528 KB
subtask1_21.txt AC 1081 ms 142108 KB