思路清晰就好,不是很难只是有点复杂。
#include<bits/stdc++.h> #define atest using namespace std; int n,l,r,t; int mapp[601][601]; int main(){ cin>>n; cin>>l; cin>>r; cin>>t; int i,j,k; for(i=0;i<n;i++){ for(j=0;j<n;j++){ cin>>mapp[i][j]; } } int s=0; int res=0; vector<int> col; for(i=0;i<n;i++){ s=0; col.clear(); for(k=0;k<n;k++){ s=0; #ifdef test cout<<min(r,n-i-1)+1+min(r,i)<<"hanggao"<<endl; #endif for(j=0;j<min(r,n-i-1)+1+min(r,i);j++){ s+=mapp[max(0,i-r)+j][k]; } col.push_back(s); #ifdef test cout<<s<<"pushed\n"; #endif } //col.push_back(0); //initialize col s=0; for(j=0;j<r+1;j++){ s+=col[j]; } for(j=0;j<n;j++){ #ifdef test cout<<i<<" "<<j<<" "<<s<<" "<<(min(j,r)+min(r,n-j-1))*(min(r,n-i-1)+1+min(r,i))<<endl; #endif if(s<=(min(j,r)+1+min(r,n-j-1))*(min(r,n-i-1)+1+min(r,i))*t) res+=1; if(j-r>=0) s-=col[j-r]; if(j+r<n+1) s+=col[j+r+1]; } } cout<<res; }