题库链接:https://nanti.jisuanke.com/t/16445
本程序80分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include<iostream> using namespace std; int prefixsum[2005][2005]; int n,k; int safe_prefix(int x,int y){ if(x>=1&&x<=n&&y>=1&&y<=n)return prefixsum[x][y]; return 0; } int pong(int x,int y){ int morse_cnt=0; bool flag=false; int cnt=0; for(int i=x-k+1;i<=x+k-1;i++){ if(!flag&&cnt==k)flag=true; if(!flag)cnt++; else cnt--; if(i<1||i>n)continue; int jmin=y-cnt+1,jmax=y+cnt-1; morse_cnt+=safe_prefix(i,jmax)-safe_prefix(i,jmin-1); } return morse_cnt; } int main(){ ios::sync_with_stdio(false); cin>>n>>k; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ int t; cin>>t; prefixsum[i][j]=prefixsum[i][j-1]+t; } } int m=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ int t=pong(i,j); if(t>m)m=t; } } cout<<m; } |