結果
問題 | No.2509 Beam Shateki |
ユーザー |
![]() |
提出日時 | 2023-10-20 23:57:29 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 2,343 bytes |
コンパイル時間 | 1,881 ms |
コンパイル使用メモリ | 200,152 KB |
最終ジャッジ日時 | 2025-02-17 11:30:22 |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 61 |
ソースコード
#define rep(i,n) for(int i=0;i<(int)(n);i++)#define ALL(v) v.begin(),v.end()typedef long long ll;#include<bits/stdc++.h>using namespace std;int A[110][110];int H[110],W[110],RD[220],LD[220];vector<int> HH(110),WW(110),RDD(220),LDD(220);int main(){ios::sync_with_stdio(false);std::cin.tie(nullptr);int h,w;cin>>h>>w;for(int i=1;i<=h;i++){for(int j=1;j<=w;j++) cin>>A[i][j];}for(int i=1;i<=h;i++){for(int j=1;j<=w;j++){H[i]+=A[i][j];W[j]+=A[i][j];RD[i-j+w-1]+=A[i][j];LD[i+j-2]+=A[i][j];HH[i]+=A[i][j];WW[j]+=A[i][j];RDD[i-j+w-1]+=A[i][j];LDD[i+j-2]+=A[i][j];}}sort(ALL(HH)),sort(ALL(WW)),sort(ALL(RDD)),sort(ALL(LDD));reverse(ALL(HH)),reverse(ALL(WW)),reverse(ALL(RDD)),reverse(ALL(LDD));int ans=0;if(h>1) ans=max(ans,HH[0]+HH[1]);else ans=max(ans,HH[0]);if(w>1) ans=max(ans,WW[0]+WW[1]);else ans=max(ans,WW[0]);if(h+w>2) ans=max(ans,RDD[0]+RDD[1]);else ans=max(ans,RDD[0]);if(h+w>2) ans=max(ans,LDD[0]+LDD[1]);else ans=max(ans,LDD[0]);for(int i=1;i<=h;i++){for(int j=1;j<=w;j++){ans=max(ans,H[i]+W[j]-A[i][j]);}}for(int j=1;j<=w;j++){for(int k=0;k<=h+w-2;k++){int ni=j-w+1+k;if(1<=ni && ni<=h) ans=max(ans,W[j]+RD[k]-A[ni][j]);else ans=max(ans,W[j]+RD[k]);}for(int k=0;k<=h+w-2;k++){int ni=-j+2+k;if(1<=ni && ni<=h) ans=max(ans,W[j]+LD[k]-A[ni][j]);else ans=max(ans,W[j]+LD[k]);}}for(int i=1;i<=h;i++){for(int k=0;k<=h+w-2;k++){int nj=i+w-1-k;if(1<=nj && nj<=w) ans=max(ans,H[i]+RD[k]-A[i][nj]);else ans=max(ans,H[i]+RD[k]);}for(int k=0;k<=h+w-2;k++){int nj=-i+2+k;if(1<=nj && nj<=w) ans=max(ans,H[i]+LD[k]-A[i][nj]);else ans=max(ans,H[i]+LD[k]);}}for(int k=0;k<=h+w-2;k++){for(int l=0;l<=h+w-2;l++){int dh=k+l-w+3,dw=w+1+l-k;if(dh%2==0 && dw%2==0 && 1<=dh/2 && dh/2<=h && dw/2>=1 && dw/2<=w){ans=max(ans,RD[k]+LD[l]-A[dh/2][dw/2]);}else ans=max(ans,RD[k]+LD[l]);}}for(int i=1;i<=h;i++) ans=max(ans,H[i]);for(int j=1;j<=w;j++) ans=max(ans,W[j]);for(int k=0;k<=h+w-2;k++){ans=max(ans,RD[k]);ans=max(ans,LD[k]);}cout<<ans<<endl;return 0;}