제출 #123208

#제출 시각아이디문제언어결과실행 시간메모리
123208miguelNautilus (BOI19_nautilus)C++14
66 / 100
1091 ms150892 KiB
#include<bits/stdc++.h> using namespace std; #define rc(x) return cout<<x<<endl,0 #define pb push_back #define dbg(x) cout << #x << '=' << x << '\n'; #define ll long long #define sz size() #define x first #define y second #define pi pair <int, int> #define pii pair <pi, int> #define vi vector <int> const ll mod = 1000000007; //#define int ll int n, m, ss, ans; set <pi> mp; bool t[501][501]; bool dp[5002][501][501]; string s; bool valid(int x, int y){ if(x>0 && x<=n && y>0 && y<=m && t[x][y]) return 1; else return 0; } int32_t main(){ ios_base :: sync_with_stdio(0); cin.tie(); cout.tie(); cin>>n>>m>>ss; for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ char c; cin>>c; if(c=='#') t[i][j]=0; else t[i][j]=1; } } cin>>s; for(int cur=0; cur<ss; cur++){ for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ if(valid(i, j) && (cur==0 || dp[cur][i][j])){ int x=i, y=j; char c=s[cur]; if(c=='?'){ if(valid(x+1, y)) dp[cur+1][x+1][y]=1, x++; x=i; y=j; if(valid(x, y+1)) dp[cur+1][x][y+1]=1, y++; x=i; y=j; if(valid(x-1, y)) dp[cur+1][x-1][y]=1, x--; x=i; y=j; if(valid(x, y-1)) dp[cur+1][x][y-1]=1, y--; } else if(c=='S'){ if(valid(x+1, y)) dp[cur+1][x+1][y]=1, x++; } else if(c=='E'){ if(valid(x, y+1)) dp[cur+1][x][y+1]=1, y++; } else if(c=='N'){ if(valid(x-1, y)) dp[cur+1][x-1][y]=1, x--; } else if(c=='W'){ if(valid(x, y-1)) dp[cur+1][x][y-1]=1, y--; } } } } } for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ if(dp[ss][i][j]) ans++; } } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...