sgu 463 - Walking around Berhattan
简单模拟,n,m貌似给反了(两个地方给的不一致 ) 害我wa了两发
1
2 /*************************************************************************
3 > File Name: code/2015summer/#5/K.cpp
4 > Author: 111qqz
5 > Email: rkz2013@126.com
6 > Created Time: 2015年07月30日 星期四 14时00分56秒
7 ************************************************************************/
8
9 #include<iostream>
10 #include<iomanip>
11 #include<cstdio>
12 #include<algorithm>
13 #include<cmath>
14 #include<cstring>
15 #include<string>
16 #include<map>
17 #include<set>
18 #include<queue>
19 #include<vector>
20 #include<stack>
21 #define y0 abc111qqz
22 #define y1 hust111qqz
23 #define yn hez111qqz
24 #define j1 cute111qqz
25 #define tm crazy111qqz
26 #define lr dying111qqz
27 using namespace std;
28 #define REP(i, n) for (int i=0;i<int(n);++i)
29 typedef long long LL;
30 typedef unsigned long long ULL;
31 const int inf = 0x7fffffff;
32 const int N=1e2+5;
33 int b[N][N];
34 int n,m;
35 char cmd[505];
36 bool vis[N][N];
37 int nx,ny;
38 int dx[4]={-1,0,1,0};
39 int dy[4]={0,1,-0,-1};
40 char ch[N][N];
41 int main()
42 {
43 cin>>n>>m;
44 nx = 0;
45 ny = 0;
46 for ( int i = 0 ; i < n ; i++)
47 cin>>ch[i];
48 for ( int i = 0 ; i <n ; i++ )
49 {
50 for ( int j = 0 ; j < m ; j++ )
51 {
52 b[i+1][j+1]=(int)(ch[i][j]-'0');
53 }
54 }
55 int ans = 0;
56 memset(vis,false,sizeof(vis));
57 int dir = 1;
58 cin>>cmd;
59 int len = strlen(cmd);
60 for ( int i = 0 ; i < len ; i ++ )
61 {
62 // cout<<"ans:"<<ans<<endl;
63 // cout<<"nx:"<<nx<<" ny:"<<ny<<endl;
64 if (cmd[i]=='L')
65 {
66 dir = (dir+3)%4;
67 }
68 if (cmd[i]=='R')
69 {
70 dir = (dir+1)%4;
71 }
72 if (cmd[i]=='M')
73 {
74 if (dir==0)
75 {
76 if (vis[nx][ny])
77 {
78 ans = ans + b[nx][ny]/2;
79 }
80 else
81 {
82 ans = ans + b[nx][ny];
83 }
84 if (vis[nx][ny+1])
85 {
86 ans = ans + b[nx][ny+1]/2;
87 }
88 else
89 {
90 ans = ans + b[nx][ny+1];
91 }
92 vis[nx][ny]=true;
93 vis[nx][ny+1]=true;
94 nx = nx +dx[dir];
95 ny = ny +dy[dir];
96 }
97 if (dir==2)
98 {
99 nx = nx + dx[dir];
100 ny = ny + dy[dir];
101 if (vis[nx][ny])
102 {
103 ans = ans + b[nx][ny]/2;
104 }
105 else
106 {
107 ans = ans + b[nx][ny];
108 }
109 if (vis[nx][ny+1])
110 {
111 ans = ans + b[nx][ny+1]/2;
112 }
113 else
114 {
115 ans = ans + b[nx][ny+1];
116 }
117 vis[nx][ny]=true;
118 vis[nx][ny+1]=true;
119 }
120 if (dir==1)
121 {
122 nx = nx + dx[dir];
123 ny = ny + dy[dir];
124 if (vis[nx][ny])
125 {
126 ans = ans + b[nx][ny]/2;
127 }
128 else
129 {
130 ans = ans + b[nx][ny];
131 }
132 if (vis[nx+1][ny])
133 {
134 ans = ans + b[nx+1][ny]/2;
135 }
136 else
137 {
138 ans = ans + b[nx+1][ny];
139 }
140 vis[nx][ny]=true;
141 vis[nx+1][ny]=true;
142
143 }
144 if (dir==3)
145 {
146
147 if (vis[nx][ny])
148 {
149 ans = ans + b[nx][ny]/2;
150 }
151 else
152 {
153 ans = ans + b[nx][ny];
154 }
155 if (vis[nx+1][ny])
156 {
157 ans = ans + b[nx+1][ny]/2;
158 }
159 else
160 {
161 ans = ans + b[nx+1][ny];
162 }
163 vis[nx][ny]=true;
164 vis[nx+1][ny]=true;
165 nx = nx +dx[dir];
166 ny = ny +dy[dir];
167 }
168 }
169
170 }
171 cout<<ans<<endl;
172
173 return 0;
174 }
175
176