Submission #377634

#TimeUsernameProblemLanguageResultExecution timeMemory
377634cpp219Nautilus (BOI19_nautilus)C++14
66 / 100
54 ms10604 KiB
#pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") #include<bits/stdc++.h> #define ll long long #define ld long double #define fs first #define sc second using namespace std; typedef pair<ll,ll> LL; const ll N = 100 + 9; const ll inf = 1e16 + 7; char a[N][N]; ll n,m,sz,dp[N][N][N]; string s; char direct[4] = {'N','E','W','S'}; ll dx[4] = {-1,0,0,1}; ll dy[4] = {0,1,-1,0}; bool chk(ll x,ll y){ return x > 0&&y > 0&&x <= n&&y <= m&&a[x][y] != '#'; } ll f(ll x,ll y,ll cur){ //cout<<x<<" "<<y<<" "<<cur<<"\n"; if (cur > sz) return 1; if (dp[x][y][cur] != -1) return dp[x][y][cur]; ll ans = 0; if (s[cur] != '?'){ ll cx = x,cy = y; for (ll i = 0;i < 4;i++){ if (s[cur] == direct[i]) cx += dx[i],cy += dy[i]; } //if (cur == 6) cout<<cx<<" "<<cy<<" "<<f(cx,cy,cur + 1)<<"\n"; if (chk(cx,cy)) ans = f(cx,cy,cur + 1); } else{ for (ll i = 0;i < 4;i++){ ll cx = x + dx[i],cy = y + dy[i]; if (chk(cx,cy)){ ans = max(ans,f(cx,cy,cur + 1)); //if (cur == 5) cout<<cx<<" "<<cy<<" "<<f(cx,cy,cur + 1)<<"\n"; } } } return dp[x][y][cur] = ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define task "test" if (fopen(task".INP","r")){ freopen(task".INP","r",stdin); //freopen(task".OUT","w",stdout); } cin>>n>>m>>sz; for (ll i = 1;i <= n;i++) for (ll j = 1;j <= m;j++) cin>>a[i][j]; cin>>s; s = " " + s; memset(dp,-1,sizeof(dp)); for (ll i = 1;i <= sz;i++){ if (s[i] == 'W') s[i] = 'E'; else if (s[i] == 'E') s[i] = 'W'; else if (s[i] == 'N') s[i] = 'S'; else if (s[i] == 'S') s[i] = 'N'; } reverse(s.begin(),s.end()); s = " " + s; ll ans = 0; for (ll i = 1;i <= n;i++) for (ll j = 1;j <= m;j++){ //cout<<i<<" "<<j<<" "<<f(i,j,1)<<"\n"; if (chk(i,j)) ans += f(i,j,1); //if (j > 2) return 0; } cout<<ans; }

Compilation message (stderr)

nautilus.cpp:2: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    2 | #pragma GCC optimization ("O3")
      | 
nautilus.cpp:3: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("unroll-loops")
      | 
nautilus.cpp: In function 'int main()':
nautilus.cpp:55:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   55 |         freopen(task".INP","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...