Submission #282972

# Submission time Handle Problem Language Result Execution time Memory
282972 2020-08-25T08:04:13 Z lani1akea T-Covering (eJOI19_covering) C++17
15 / 100
1000 ms 2248 KB
#include <bits/stdc++.h>

#define F first
#define S second
#define ll long long
#define pb push_back
#define endl '\n'

using namespace std;

const int MOD = 1e9+7;
const int N = 1e3;
int n, m, k, g[N][N], x[N * 1000], y[N * 1000], ans = -1;

void dfs(int nu, int used[N][N], int p) {
    if (nu == k) {
        ans = max(ans, p);
        return;
    }
    if (x[nu] < n - 1 and y[nu] < m - 1 and y[nu] and !used[x[nu]][y[nu]] and !used[x[nu]][y[nu] - 1] and !used[x[nu]][y[nu] + 1] and !used[x[nu] + 1][y[nu]]) { // down
        used[x[nu]][y[nu]] = used[x[nu]][y[nu] - 1] = used[x[nu]][y[nu] + 1] = used[x[nu] + 1][y[nu]] = 1;
        p += g[x[nu]][y[nu]];
        p += g[x[nu]][y[nu] - 1];
        p += g[x[nu]][y[nu] + 1];
        p += g[x[nu] + 1][y[nu]];
        dfs(nu + 1, used, p);
        used[x[nu]][y[nu]] = used[x[nu]][y[nu] - 1] = used[x[nu]][y[nu] + 1] = used[x[nu] + 1][y[nu]] = 0;
        p -= g[x[nu]][y[nu]];
        p -= g[x[nu]][y[nu] - 1];
        p -= g[x[nu]][y[nu] + 1];
        p -= g[x[nu] + 1][y[nu]];
    }
    if (x[nu] and y[nu] < m - 1 and y[nu] and !used[x[nu]][y[nu]] and !used[x[nu]][y[nu] - 1] and !used[x[nu]][y[nu] + 1] and !used[x[nu] - 1][y[nu]]) { // up
        used[x[nu]][y[nu]] = used[x[nu]][y[nu] - 1] = used[x[nu]][y[nu] + 1] = used[x[nu] - 1][y[nu]] = 1;
        p += g[x[nu]][y[nu]];
        p += g[x[nu]][y[nu] - 1];
        p += g[x[nu]][y[nu] + 1];
        p += g[x[nu] - 1][y[nu]];
        dfs(nu + 1, used, p);
        used[x[nu]][y[nu]] = used[x[nu]][y[nu] - 1] = used[x[nu]][y[nu] + 1] = used[x[nu] - 1][y[nu]] = 0;
        p -= g[x[nu]][y[nu]];
        p -= g[x[nu]][y[nu] - 1];
        p -= g[x[nu]][y[nu] + 1];
        p -= g[x[nu] - 1][y[nu]];
    }
    if (x[nu] < n - 1 and x[nu] and y[nu] and !used[x[nu]][y[nu]] and !used[x[nu]][y[nu] - 1] and !used[x[nu] + 1][y[nu]] and !used[x[nu] - 1][y[nu]]) { // left
        used[x[nu]][y[nu]] =  used[x[nu]][y[nu] - 1] =  used[x[nu] + 1][y[nu]] = used[x[nu] - 1][y[nu]] = 1;
        p += g[x[nu]][y[nu]];
        p += g[x[nu]][y[nu] - 1];
        p += g[x[nu] + 1][y[nu]];
        p += g[x[nu] - 1][y[nu]];
        dfs(nu + 1, used, p);
        used[x[nu]][y[nu]] =  used[x[nu]][y[nu] - 1] =  used[x[nu] + 1][y[nu]] = used[x[nu] - 1][y[nu]] = 0;
        p -= g[x[nu]][y[nu]];
        p -= g[x[nu]][y[nu] - 1];
        p -= g[x[nu] + 1][y[nu]];
        p -= g[x[nu] - 1][y[nu]];
    }
    if (x[nu] < n - 1 and x[nu] and y[nu] < m - 1 and !used[x[nu]][y[nu]] and !used[x[nu]][y[nu] + 1] and !used[x[nu] + 1][y[nu]] and !used[x[nu] - 1][y[nu]]) { // right
        used[x[nu]][y[nu]] =  used[x[nu]][y[nu] + 1] =  used[x[nu] + 1][y[nu]] = used[x[nu] - 1][y[nu]] = 1;
        p += g[x[nu]][y[nu]];
        p += g[x[nu]][y[nu] + 1];
        p += g[x[nu] + 1][y[nu]];
        p += g[x[nu] - 1][y[nu]];
        dfs(nu + 1, used, p);
        used[x[nu]][y[nu]] =  used[x[nu]][y[nu] + 1] =  used[x[nu] + 1][y[nu]] = used[x[nu] - 1][y[nu]] = 0;
        p -= g[x[nu]][y[nu]];
        p -= g[x[nu]][y[nu] + 1];
        p -= g[x[nu] + 1][y[nu]];
        p -= g[x[nu] - 1][y[nu]];
    }

}

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0); cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      cin >> g[i][j];
    }
  }
  cin >> k;
  for (int i = 0; i < k; ++i) {
    cin >> x[i] >> y[i];
  }
  int used[N][N];
  dfs(0,used,0);
  if (ans == -1)
    cout << "No\n";
  else
    cout << ans << endl;
}
# Verdict Execution time Memory Grader output
1 Correct 67 ms 896 KB Output is correct
2 Execution timed out 1083 ms 2048 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 61 ms 896 KB Output is correct
2 Execution timed out 1092 ms 2068 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 29 ms 896 KB Output is correct
2 Execution timed out 1093 ms 2248 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 60 ms 384 KB Output is correct
2 Execution timed out 1089 ms 384 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 67 ms 896 KB Output is correct
2 Execution timed out 1083 ms 2048 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 67 ms 896 KB Output is correct
2 Execution timed out 1083 ms 2048 KB Time limit exceeded
3 Halted 0 ms 0 KB -