結果
| 問題 |
No.2509 Beam Shateki
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-10-20 21:56:29 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,596 bytes |
| コンパイル時間 | 812 ms |
| コンパイル使用メモリ | 76,312 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-09-20 18:43:06 |
| 合計ジャッジ時間 | 2,220 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | AC * 2 WA * 59 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int H, W;
std::cin >> H >> W;
// Create a 2D vector to represent the grid
std::vector<std::vector<int>> A(H + 2, std::vector<int>(W + 2, 0));
// Input the values of the inner grid
for (int i = 1; i <= H; ++i) {
for (int j = 1; j <= W; ++j) {
std::cin >> A[i][j];
}
}
// Initialize the maximum sum to 0
int maxSum = 0;
// Iterate over all possible beam directions
for (int dx1 = -1; dx1 <= 1; ++dx1) {
for (int dy1 = -1; dy1 <= 1; ++dy1) {
for (int dx2 = -1; dx2 <= 1; ++dx2) {
for (int dy2 = -1; dy2 <= 1; ++dy2) {
// Skip cases where both directions are (0, 0) or the same
if ((dx1 == 0 && dy1 == 0) || (dx2 == 0 && dy2 == 0) || (dx1 == dx2 && dy1 == dy2)) {
continue;
}
// Initialize a temporary grid to store destroyed values
std::vector<std::vector<int>> tempGrid(A);
// Perform the first beam operation
for (int x = 1; x <= H; ++x) {
for (int y = 1; y <= W; ++y) {
if (x + dx1 >= 0 && x + dx1 <= H + 1 && y + dy1 >= 0 && y + dy1 <= W + 1) {
tempGrid[x + dx1][y + dy1] = std::max(tempGrid[x + dx1][y + dy1], A[x][y]);
}
}
}
// Perform the second beam operation
for (int x = 1; x <= H; ++x) {
for (int y = 1; y <= W; ++y) {
if (x + dx2 >= 0 && x + dx2 <= H + 1 && y + dy2 >= 0 && y + dy2 <= W + 1) {
tempGrid[x + dx2][y + dy2] = std::max(tempGrid[x + dx2][y + dy2], A[x][y]);
}
}
}
// Calculate the sum of destroyed values
int sum = 0;
for (int x = 1; x <= H; ++x) {
for (int y = 1; y <= W; ++y) {
if (tempGrid[x][y] > A[x][y]) {
sum += tempGrid[x][y] - A[x][y];
}
}
}
// Update the maximum sum
maxSum = std::max(maxSum, sum);
}
}
}
}
std::cout << maxSum << std::endl;
return 0;
}