답안 #236074

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
236074 2020-05-31T07:03:35 Z NONAME Retro (COCI17_retro) C++17
0 / 100
138 ms 109304 KB
#include <bits/stdc++.h>
#define all(x) x.begin(), x.end()
#define sz(x) int(x.size())
#define in(x) freopen(x, "r", stdin)
#define out(x) freopen(x, "w", stdout)
#define N 100500
#define oo ll(1e16)
#define ft first
#define sd second
#define pb push_back
#define ppb pop_back
#define el '\n'
#define elf endl
#define base ll(1e9 + 7)
using namespace std;

typedef long long ll;
typedef long double ld;

int n, m, f[300][300][300];
string s[N];

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    cin >> n >> m;
    for (int i = 0; i < n; i++)
		cin >> s[i];

	for (int i = 0; i < n - i - 1; i++)
		swap(s[i], s[n - i - 1]);

	for (int i = 0; i < n; i++)
	for (int j = 0; j < m; j++)
	for (int k = 0; k < n; k++)
		f[i][j][0] = -1;
    for (int i = 0; i < n - 1; i++)
	for (int j = 0; j < m; j++)
        if (i == 0) {
			if (s[i][j] == 'M') {
				f[i][j][0] = 0;
                if (j - 1 >= 0 && s[i + 1][j - 1] != '*') {
					if (s[i + 1][j - 1] == '.') {
						for (int k = 0; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j - 1][k] = max(f[i + 1][j - 1][k], f[i][j][k]);
					} else {
						if (s[i + 1][j - 1] == '(') {
							for (int k = 0; k < n; k++)
								if (f[i][j][k] != -1)
									f[i + 1][j - 1][k + 1] = max(f[i + 1][j - 1][k + 1], f[i][j][k] + 1);
						} else {
                            for (int k = 1; k < n; k++)
								if (f[i][j][k] != -1)
									f[i + 1][j - 1][k - 1] = max(f[i + 1][j - 1][k - 1], f[i][j][k] + 1);
						}
					}
                }
                if (s[i + 1][j] != '*') {
					if (s[i + 1][j] == '.') {
						for (int k = 0; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j][k] = max(f[i + 1][j][k], f[i][j][k]);
					} else {
						if (s[i + 1][j] == '(') {
							for (int k = 0; k < n; k++)
								if (f[i][j][k] != -1)
									f[i + 1][j][k + 1] = max(f[i + 1][j][k + 1], f[i][j][k] + 1);
						} else {
                            for (int k = 1; k < n; k++)
								if (f[i][j][k] != -1)
									f[i + 1][j][k - 1] = max(f[i + 1][j][k - 1], f[i][j][k] + 1);
						}
					}
                }
                if (j + 1 < m && s[i + 1][j + 1] != '*') {
					if (s[i + 1][j + 1] == '.') {
						for (int k = 0; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j + 1][k] = max(f[i + 1][j + 1][k], f[i][j][k]);
					} else {
						if (s[i + 1][j + 1] == '(') {
							for (int k = 0; k < n; k++)
								if (f[i][j][k] != -1)
									f[i + 1][j + 1][k + 1] = max(f[i + 1][j + 1][k + 1], f[i][j][k] + 1);
						} else {
                            for (int k = 1; k < n; k++)
								if (f[i][j][k] != -1)
									f[i + 1][j + 1][k - 1] = max(f[i + 1][j + 1][k - 1], f[i][j][k] + 1);
						}
					}
                }
			}
        } else {
			if (j - 1 >= 0 && s[i + 1][j - 1] != '*') {
				if (s[i + 1][j - 1] == '.') {
					for (int k = 0; k < n; k++)
						if (f[i][j][k] != -1)
							f[i + 1][j - 1][k] = max(f[i + 1][j - 1][k], f[i][j][k]);
				} else {
					if (s[i + 1][j - 1] == '(') {
						for (int k = 0; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j - 1][k + 1] = max(f[i + 1][j - 1][k + 1], f[i][j][k] + 1);
					} else {
						for (int k = 1; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j - 1][k - 1] = max(f[i + 1][j - 1][k - 1], f[i][j][k] + 1);
					}
				}
			}
			if (s[i + 1][j] != '*') {
				if (s[i + 1][j] == '.') {
					for (int k = 0; k < n; k++)
						if (f[i][j][k] != -1)
							f[i + 1][j][k] = max(f[i + 1][j][k], f[i][j][k]);
				} else {
					if (s[i + 1][j] == '(') {
						for (int k = 0; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j][k + 1] = max(f[i + 1][j][k + 1], f[i][j][k] + 1);
					} else {
						for (int k = 1; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j][k - 1] = max(f[i + 1][j][k - 1], f[i][j][k] + 1);
					}
				}
			}
			if (j + 1 < m && s[i + 1][j + 1] != '*') {
				if (s[i + 1][j + 1] == '.') {
					for (int k = 0; k < n; k++)
						if (f[i][j][k] != -1)
							f[i + 1][j + 1][k] = max(f[i + 1][j + 1][k], f[i][j][k]);
				} else {
					if (s[i + 1][j + 1] == '(') {
						for (int k = 0; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j + 1][k + 1] = max(f[i + 1][j + 1][k + 1], f[i][j][k] + 1);
					} else {
						for (int k = 1; k < n; k++)
							if (f[i][j][k] != -1)
								f[i + 1][j + 1][k - 1] = max(f[i + 1][j + 1][k - 1], f[i][j][k] + 1);
					}
				}
			}
		}

    int mx = 0;
    for (int i = 0; i < n; i++)
	for (int j = 0; j < m; j++)
		mx = max(mx, f[i][j][0]);

	cout << mx << el;
	cout << "()";
}

Compilation message

retro.cpp: In function 'int main()':
retro.cpp:149:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
     for (int i = 0; i < n; i++)
     ^~~
retro.cpp:153:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  cout << mx << el;
  ^~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 3584 KB Output isn't correct
2 Incorrect 7 ms 3840 KB Output isn't correct
3 Incorrect 6 ms 3712 KB Output isn't correct
4 Incorrect 6 ms 3968 KB Output isn't correct
5 Incorrect 7 ms 5248 KB Output isn't correct
6 Incorrect 10 ms 9216 KB Output isn't correct
7 Incorrect 13 ms 12160 KB Output isn't correct
8 Incorrect 11 ms 7680 KB Output isn't correct
9 Incorrect 13 ms 12288 KB Output isn't correct
10 Incorrect 17 ms 15616 KB Output isn't correct
11 Incorrect 134 ms 102648 KB Output isn't correct
12 Incorrect 120 ms 102560 KB Output isn't correct
13 Incorrect 59 ms 47480 KB Output isn't correct
14 Incorrect 57 ms 47476 KB Output isn't correct
15 Incorrect 134 ms 108920 KB Output isn't correct
16 Incorrect 138 ms 109048 KB Output isn't correct
17 Incorrect 117 ms 92792 KB Output isn't correct
18 Incorrect 110 ms 92792 KB Output isn't correct
19 Incorrect 136 ms 109304 KB Output isn't correct
20 Incorrect 134 ms 109304 KB Output isn't correct