제출 #496566

#제출 시각아이디문제언어결과실행 시간메모리
496566vinnipuh01Nautilus (BOI19_nautilus)C++17
100 / 100
280 ms808 KiB
#include <iostream>
#include <bits/stdc++.h>
#include <cmath>
#include <algorithm>
#include <vector>
#include <deque>
#include <set>
#include <stack>
#include <string>
#include <map>
#include <queue>
#include <bitset>
#define int long long
 
using namespace std;
 
const long long oo = 1000000000000000000;
 
long long  sum, ans = 0, mx = 0, mn = 1000000000, num, pos;
 
 
/*
    ViHHiPuh
 
   (( `'-""``""-'` ))
     )-__-_.._-__-(
   / --- (o _ o) --- \
   \ .-* ( .0. ) *-. /
   _'-. ,_ '=' _, .-'_
  / `;#'#'# - #'#'#;` \
 \_)) -----'#'----- ((_/
      # --------- #
  '# ------- ------ #'
  /..-'# ------- #'-.\
  _\...-\'# -- #'/-.../_
  ((____)- '#' -(____))
 
 
    cout << fixed << setprecision(6) << x;
 
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
 
    freopen ( "sum.in", "r", stdin )
*/

int n, m, k;
char c[ 501 ][ 501 ];
bitset <500> st[ 500 ], mp[ 500 ], stt[ 500 ], st1[ 500 ], ss[ 500 ];

main () {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> m >> k;
    string s;
    for ( int i = 0; i < n; i ++ ) {
    	for ( int j = 0; j < m; j ++ ) {
    		cin >> c[ i ][ j ];
    		if ( c[ i ][ j ] == '.' ) {
    			st[ i ][ j ] = 1;
    			mp[ i ][ j ] = 1;
    		}
    	}
	}
	cin >> s;
	for ( auto k : s ) {
		if ( k == 'W' ) {
			for ( int i = 0; i < n; i ++ ) {
				st[ i ] = st[ i ] >> 1;
			}
		}
		else if ( k == 'E' ) {
			for ( int i = 0; i < n; i ++ ) {
				st[ i ] = st[ i ] << 1;
			}
		}
		else if ( k == 'N' ) {
			for ( int i = 0; i < n - 1; i ++ ) {
				st[ i ] = st[ i + 1 ];
			}
			for ( int i = 0; i < m; i ++ )
				st[ n - 1 ][ i ] = 0;
		}
		else if ( k == 'S' ) {
			for ( int i = n - 1; i >= 1; i -- ) {
				st[ i ] = st[ i - 1 ];
			}
			for ( int i = 0; i < m; i ++ )
				st[ 0 ][ i ] = 0;
		}
		else {
			for ( int i = 0; i < n; i ++ ) {
				ss[ i ] = st[ i ];
				stt[ i ] = st[ i ];
				st[ i ] = st1[ i ];
			}
			for ( int i = 0; i < n; i ++ )
				stt[ i ] = stt[ i ] >> 1;
			for ( int i = 0; i < n; i ++ )
				st[ i ] = st[ i ] | stt[ i ];
			for ( int i = 0; i < n; i ++ )
				stt[ i ] = ss[ i ];
			for (  int i = 0; i < n; i ++ )
				stt[ i ] = stt[ i ] << 1;
			for ( int i = 0; i < n; i ++ )
				st[ i ] = st[ i ] | stt[ i ];
			for ( int i = 0; i < n; i ++ )
				stt[ i ] = ss[ i ];
			for ( int i = 0; i < n - 1; i ++ ) {
				stt[ i ] = stt[ i + 1 ];
			}
			for ( int i = 0; i < m; i ++ )
				stt[ n - 1 ][ i ] = 0;
			for ( int i = 0; i < n; i ++ )
				st[ i ] = st[ i ] | stt[ i ];
			for ( int i = 0; i < n; i ++ )
				stt[ i ] = ss[ i ];
				
			for ( int i = n - 1; i >= 1; i -- ) {
				stt[ i ] = stt[ i - 1 ];
			}
			for ( int i = 0; i < m; i ++ )
				stt[ 0 ][ i ] = 0;
			for ( int i = 0; i < n; i ++ )
				st[ i ] = st[ i ] | stt[ i ];
		}
		for ( int i = 0; i < n; i ++ )
			st[ i ] = st[ i ] & mp[ i ];
	}
	for ( int i = 0; i < n; i ++ ) {
		ans += st[ i ].count();
	}
	cout << ans;
}

컴파일 시 표준 에러 (stderr) 메시지

nautilus.cpp:51:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   51 | main () {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...