제출 #1214372

#제출 시각아이디문제언어결과실행 시간메모리
1214372g4yuhgNautilus (BOI19_nautilus)C++20
100 / 100
151 ms784 KiB
//Huyduocdithitp #include <bits/stdc++.h> typedef int ll; #define endl '\n' #define yes cout<<"YES"<<endl; #define no cout<<"NO"<<endl; #define fi first #define se second #define pii pair<ll, ll> #define inf 1e18 #define faster ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); #define MP make_pair #define TASK "ghuy4g" #define start if(fopen(TASK".inp","r")){freopen(TASK".inp","r",stdin);freopen(TASK".out","w",stdout);} #define LOG 19 #define N 100010 using namespace std; bool ghuy4g; const ll hx[] = {-1, 0, 1, 0}; const ll hy[] = {0, 1, 0, -1}; // N E S W // ^ > v < ll r, c, m; char a[505][505]; bitset<505> dp[2][505], goc[505]; void move(ll huong) { if (huong == 0) { for (int i = 1; i <= r; i ++) { dp[1][i] = dp[0][i + 1]; dp[1][i] = dp[1][i] & goc[i]; } for (int i = 1; i <= r; i ++) { dp[0][i] = dp[1][i]; } } else if (huong == 2) { for (int i = 1; i <= r; i ++) { dp[1][i] = dp[0][i - 1]; dp[1][i] = dp[1][i] & goc[i]; } for (int i = 1; i <= r; i ++) { dp[0][i] = dp[1][i]; } } else if (huong == 1) { for (int i = 1; i <= r; i ++) { //dp[1][i] = (dp[0][i] >> 1); dp[1][i] = (dp[0][i] << 1); dp[1][i] = dp[1][i] & goc[i]; } for (int i = 1; i <= r; i ++) { dp[0][i] = dp[1][i]; } } else if (huong == 3){ for (int i = 1; i <= r; i ++) { //dp[1][i] = (dp[0][i] << 1); dp[1][i] = (dp[0][i] >> 1); dp[1][i] = dp[1][i] & goc[i]; } for (int i = 1; i <= r; i ++) { dp[0][i] = dp[1][i]; } } else { for (int i = 1; i <= r; i ++) { dp[1][i] = (dp[0][i - 1] | dp[0][i + 1] | (dp[0][i] >> 1) | (dp[0][i] << 1)); dp[1][i] = dp[1][i] & goc[i]; } for (int i = 1; i <= r; i ++) { dp[0][i] = dp[1][i]; } } } bool klinh; signed main(void) { faster; cin >> r >> c >> m; for (int i = 1; i <= r; i ++) { for (int j = 1; j <= c; j ++) { cin >> a[i][j]; if (a[i][j] == '.') { dp[0][i].set(j); goc[i].set(j); //cout << i << " " << j << endl; } } } map<char, ll> mp; mp['N'] = 0, mp['E'] = 1, mp['S'] = 2, mp['W'] = 3; for (int i = 1; i <= m; i ++) { char C; cin >> C; if (C != '?') { ll id = mp[C]; move(id); } else { move(-1); } /*for (int id = 1; id <= r; id ++) { for (int jd = 1; jd <= c; jd ++) { cout << dp[0][id][jd] << " "; } cout << endl; }*/ } ll ans = 0; for (int i = 1; i <= r; i ++) { for (int j = 1; j <= c; j ++) { ans = ans + (dp[0][i][j] == 1); } } cout << ans; cerr << fabs ((&ghuy4g - &klinh) / 1048576.0); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...