Implementation
J_4_Snail_Path.cpp
Wrap
Copy code
Full screen
C++
1 #include <bits/stdc++.h>
2 using namespace std;
3 using ll = long long ;
4 using i128 = __int128;
5 const int inf = 1e9 ;
6 const ll INF = 1LL << 60 ;
7 int main () {
8 ios:: sync_with_stdio (0 ); cin.tie (0 );
9 set < pair < int , int >> s;
10 int m; cin >> m;
11 set < pair < int , int >> vis;
12 pair < int , int > cur = {200000 , 200000 };
13 vis.insert ({cur.first, cur.second});
14 int cnt = 0 ;
15 for (int j = 0 ; j < m; j++ ) {
16 char c; int x; cin >> c >> x;
17 if (c == 'N' ) {
18 for (int i = cur.second + 1 ; i <= cur.second + x; i++ ) {
19 if (vis.count (make_pair (cur.first, i))) cnt++ ;
20 vis.insert ({cur.first, i});
21 }
22 cur = make_pair (cur.first, cur.second + x);
23 } else if (c == 'S' ) {
24 for (int i = cur.second - 1 ; i >= cur.second - x; i-- ) {
25 if (vis.count (make_pair (cur.first, i))) cnt++ ;
26 vis.insert ({cur.first, i});
27 }
28 cur = make_pair (cur.first, cur.second - x);
29 } else if (c == 'E' ) {
30 for (int i = cur.first + 1 ; i <= cur.first + x; i++ ) {
31 if (vis.count (make_pair (i, cur.second))) cnt++ ;
32 vis.insert ({i, cur.second});
33 }
34 cur = make_pair (cur.first + x, cur.second);
35 } else {
36 for (int i = cur.first - 1 ; i >= cur.first - x; i-- ) {
37 if (vis.count (make_pair (i, cur.second))) cnt++ ;
38 vis.insert ({i, cur.second});
39 }
40 cur = make_pair (cur.first - x, cur.second);
41 }
42 }
43 cout << cnt << '\n' ;
44 return 0 ;
45 }