結果

問題 No.2509 Beam Shateki
ユーザー rniya
提出日時 2023-10-20 21:31:12
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 1,482 ms / 2,000 ms
コード長 3,867 bytes
コンパイル時間 1,921 ms
コンパイル使用メモリ 207,068 KB
最終ジャッジ日時 2025-02-17 08:38:28
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 61
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
#ifdef LOCAL
#include <debug.hpp>
#else
#define debug(...) void(0)
#endif
using namespace std;
typedef long long ll;
#define all(x) begin(x), end(x)
constexpr int INF = (1 << 30) - 1;
constexpr long long IINF = (1LL << 60) - 1;
constexpr int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
template <class T> istream& operator>>(istream& is, vector<T>& v) {
for (auto& x : v) is >> x;
return is;
}
template <class T> ostream& operator<<(ostream& os, const vector<T>& v) {
auto sep = "";
for (const auto& x : v) os << exchange(sep, " ") << x;
return os;
}
template <class T, class U = T> bool chmin(T& x, U&& y) { return y < x and (x = forward<U>(y), true); }
template <class T, class U = T> bool chmax(T& x, U&& y) { return x < y and (x = forward<U>(y), true); }
template <class T> void mkuni(vector<T>& v) {
sort(begin(v), end(v));
v.erase(unique(begin(v), end(v)), end(v));
}
template <class T> int lwb(const vector<T>& v, const T& x) { return lower_bound(begin(v), end(v), x) - begin(v); }
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int H, W;
cin >> H >> W;
vector A(H, vector<int>(W));
cin >> A;
ll ans = 0;
vector<pair<int, int>> ex;
for (int i = -1; i <= H; i++) {
for (int j = -1; j <= W; j++) {
if (i == -1 or i == H or j == -1 or j == W) {
ex.emplace_back(i, j);
}
}
}
vector check(H, vector<bool>(W, false));
for (int i = 0; i < int(ex.size()); i++) {
for (int j = i; j < int(ex.size()); j++) {
for (int dx1 = -1; dx1 <= 1; dx1++) {
for (int dy1 = -1; dy1 <= 1; dy1++) {
if (dx1 == 0 and dy1 == 0) continue;
for (int dx2 = -1; dx2 <= 1; dx2++) {
for (int dy2 = -1; dy2 <= 1; dy2++) {
if (dx2 == 0 and dy2 == 0) continue;
ll sum = 0;
{
auto [x, y] = ex[i];
while (true) {
x += dx1, y += dy1;
if (x < 0 or H <= x or y < 0 or W <= y) break;
if (not check[x][y]) sum += A[x][y];
check[x][y] = true;
}
}
{
auto [x, y] = ex[j];
while (true) {
x += dx2, y += dy2;
if (x < 0 or H <= x or y < 0 or W <= y) break;
if (not check[x][y]) sum += A[x][y];
check[x][y] = true;
}
}
chmax(ans, sum);
{
auto [x, y] = ex[i];
while (true) {
x += dx1, y += dy1;
if (x < 0 or H <= x or y < 0 or W <= y) break;
check[x][y] = false;
}
}
{
auto [x, y] = ex[j];
while (true) {
x += dx2, y += dy2;
if (x < 0 or H <= x or y < 0 or W <= y) break;
check[x][y] = false;
}
}
}
}
}
}
}
}
cout << ans << '\n';
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0