結果
問題 | No.2509 Beam Shateki |
ユーザー |
![]() |
提出日時 | 2023-10-20 22:10:43 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 7,340 bytes |
コンパイル時間 | 3,525 ms |
コンパイル使用メモリ | 265,664 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-20 19:17:17 |
合計ジャッジ時間 | 5,412 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 50 WA * 11 |
ソースコード
#include <bits/stdc++.h>#include <initializer_list>#include <vector>namespace nono {template <typename T>class Matrix {public:Matrix() = default;Matrix(int row, int column): row_(row), column_(column), data_(row, std::vector<T>(column)) {}Matrix(int row, int column, T elem): row_(row), column_(column), data_(row, std::vector<T>(column, elem)) {}explicit Matrix(const std::vector<std::vector<T>>& data): row_(data.size()),column_(data.front().size()),data_(data) {for (int i = 0; i < row_; i++) {}}Matrix(std::initializer_list<std::vector<T>> init): data_(init.begin(), init.end()) {row_ = data_.size();column_ = data_.front().size();for (int i = 0; i < row_; i++) {}}const std::vector<T>& operator[](const int pos) const {return data_[pos];}std::vector<T>& operator[](const int pos) {return data_[pos];}Matrix& operator+=(const T rhs) {for (int i = 0; i < row_; i++) {for (int j = 0; j < column_; j++) {data_[i][j] += rhs;}}return *this;}Matrix& operator-=(const T rhs) {for (int i = 0; i < row_; i++) {for (int j = 0; j < column_; j++) {data_[i][j] -= rhs;}}return *this;}Matrix& operator*=(const T rhs) {for (int i = 0; i < row_; i++) {for (int j = 0; j < column_; j++) {data_[i][j] *= rhs;}}return *this;}Matrix& operator/=(const T rhs) {for (int i = 0; i < row_; i++) {for (int j = 0; j < column_; j++) {data_[i][j] /= rhs;}}return *this;}friend Matrix operator+(const Matrix& lhs, const T rhs) {return Matrix(lhs) += rhs;}friend Matrix operator+(const T lhs, const Matrix& rhs) {return Matrix(rhs) += lhs;}friend Matrix operator-(const Matrix& lhs, const T rhs) {return Matrix(lhs) -= rhs;}friend Matrix operator-(const T lhs, const Matrix& rhs) {return Matrix(rhs) -= lhs;}friend Matrix operator*(const Matrix& lhs, const T rhs) {return Matrix(lhs) *= rhs;}friend Matrix operator*(const T lhs, const Matrix& rhs) {return Matrix(rhs) *= lhs;}friend Matrix operator/(const Matrix& lhs, const T rhs) {return Matrix(lhs) /= rhs;}friend Matrix operator/(const T lhs, const Matrix& rhs) {return Matrix(rhs) /= lhs;}Matrix& operator+=(const Matrix& rhs) {for (int i = 0; i < row_; i++) {for (int j = 0; j < column_; j++) {data_[i][j] += rhs.data_[i][j];}}return *this;}Matrix& operator-=(const Matrix& rhs) {for (int i = 0; i < row_; i++) {for (int j = 0; j < column_; j++) {data_[i][j] -= rhs.data_[i][j];}}return *this;}Matrix& operator*=(const Matrix& rhs) {std::vector<std::vector<T>> mat(row_, std::vector<T>(rhs.column_));for (int i = 0; i < row_; i++) {for (int k = 0; k < column_; k++) {for (int j = 0; j < rhs.column_; j++) {mat[i][j] += data_[i][k] * rhs.data_[k][j];}}}data_ = std::move(mat);column_ = rhs.column_;return *this;}friend Matrix operator+(const Matrix& lhs, const Matrix& rhs) {return Matrix(lhs) += rhs;}friend Matrix operator-(const Matrix& lhs, const Matrix& rhs) {return Matrix(lhs) -= rhs;}friend Matrix operator*(const Matrix& lhs, const Matrix& rhs) {return Matrix(lhs) *= rhs;}[[nodiscard]] Matrix pow(long long exp) const {Matrix result(row_, column_);Matrix base(*this);for (int i = 0; i < row_; i++) {result[i][i] = static_cast<T>(1);}while (exp > 0) {if (exp & 1) {result *= base;}base *= base;exp >>= 1;}return result;}[[nodiscard]] Matrix rotate() {std::vector<std::vector<T>> result(column_, std::vector<T>(row_));for (int i = 0; i < row_; i++) {for (int j = 0; j < column_; j++) {result[j][row_ - i - 1] = data_[i][j];}}return Matrix(result);}[[nodiscard]] Matrix transpose() {std::vector<std::vector<T>> result(column_, std::vector<T>(row_));for (int i = 0; i < row_; i++) {for (int j = 0; j < column_; j++) {result[j][i] = data_[i][j];}}return Matrix(result);}int row() {return row_;}int column() {return column_;}private:int row_, column_;std::vector<std::vector<T>> data_;};} // namespace nononamespace nono {struct Init {};void solve([[maybe_unused]] const Init& init) {int h, w;std::cin >> h >> w;Matrix<int> grid(h, w);for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {std::cin >> grid[i][j];}}int ans = 0;for (int a = 0; a < 2; a++) {for (int b = 0; b < 2; b++) {int r = grid.row();int c = grid.column();std::vector<int> row(r);std::vector<int> naname(r + c - 1);for (int i = 0; i < r; i++) {for (int j = 0; j < c; j++) {row[i] += grid[i][j];naname[i + j] += grid[i][j];}}for (int k = 0; k + 1 < r + c; k++) {int i = std::max(k - c + 1, 0);int j = std::min(k, c - 1);ans = std::max(ans, row[i] + naname[i + j] - grid[i][j]);}grid = grid.rotate();}auto temp = grid;int r = grid.row();int c = grid.column();for (int i = 0; i < r; i++) {for (int j = 0; j < c; j++) {grid[i][j] = temp[i][c - j - 1];}}}std::vector<int> row(h);std::vector<int> column(w);for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {row[i] += grid[i][j];column[j] += grid[i][j];}}for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {ans = std::max(ans, row[i] + column[j] - grid[i][j]);}}std::ranges::sort(row, std::greater());std::ranges::sort(column, std::greater());if (h > 1) {ans = std::max(ans, row[0] + row[1]);} else {ans = std::max(ans, row[0]);}if (w > 1) {ans = std::max(ans, column[0] + column[1]);} else {ans = std::max(ans, column[0]);}std::cout << ans << std::endl;}} // namespace nonoint main() {std::cin.tie(0)->sync_with_stdio(0);std::cout << std::fixed << std::setprecision(16);int t = 1;nono::Init init;while (t--) nono::solve(init);}