結果
問題 | No.2509 Beam Shateki |
ユーザー | 👑 binap |
提出日時 | 2023-10-20 21:55:16 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,937 ms / 2,000 ms |
コード長 | 1,813 bytes |
コンパイル時間 | 4,549 ms |
コンパイル使用メモリ | 266,672 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-20 18:45:14 |
合計ジャッジ時間 | 56,167 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 61 |
ソースコード
#include<bits/stdc++.h> #include<atcoder/all> #define rep(i,n) for(int i=0;i<n;i++) using namespace std; using namespace atcoder; typedef long long ll; typedef vector<int> vi; typedef vector<long long> vl; typedef vector<vector<int>> vvi; typedef vector<vector<long long>> vvl; typedef long double ld; template <int m> std::ostream& operator<<(std::ostream& os, const atcoder::static_modint<m>& a) {os << a.val(); return os;} template<typename T> istream& operator>>(istream& is, vector<T>& v){int n = v.size(); assert(n > 0); rep(i, n) is >> v[i]; return is;} template<typename T> ostream& operator<<(ostream& os, const vector<T>& v){int n = v.size(); rep(i, n) os << v[i] << (i == n - 1 ? "\n" : " "); return os;} template <typename T> ostream& operator<<(ostream& os, const vector<vector<T>>& v){int n = v.size(); rep(i, n) os << v[i] << (i == n - 1 ? "\n" : ""); return os;} int main(){ int h, w; cin >> h >> w; vector<vector<int>> a(h, vi(w)); rep(y, h) cin >> a[y]; int ans = 0; int n = h + w + (h + w - 1) + (h + w - 1); vi v(2); for(v[0] = 0; v[0] < n; v[0]++){ for(v[1] = v[0] + 1; v[1] < n; v[1]++){ unordered_set<int> se; rep(i, 2){ if(v[i] < h){ int y = v[i]; rep(x, w) se.insert(y * w + x); }else if(v[i] < h + w){ int x = v[i] - h; rep(y, h) se.insert(y * w + x); }else if(v[i] < h + w + (h + w - 1)){ int s = v[i] - (h + w); rep(y, h){ int x = s - y; if(x >= 0 and x < w) se.insert(y * w + x); } }else{ int d = v[i] - (h + w + (h + w - 1)) - (w - 1); rep(y, h){ int x = y - d; if(x >= 0 and x < w) se.insert(y * w + x); } } } int tmp = 0; for(auto z : se){ int y = z / w; int x = z % w; tmp += a[y][x]; } ans = max(ans, tmp); } } cout << ans; return 0; }