I have been having trouble with a problem called the lazy cow (link: USACO) for a while now. I still do not quite understand this code, can someone help guide me through the code?
#include
#define MAX 801
using namespace std;
int n,k,mat[MAX][MAX],best;
int main()
{
ifstream fin(“lazy.in”);
fin >> n >> k;
// rotate the matrix 45 degrees
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
fin >> mat[i+j][n-i+j-1];
fin.close();
// 45 degree rotation expands the size of the matrix
// it also includes the cells with half distance
int t=(n+1)%2; // t is used to avoid non-lattice points
n=n*2-1;
for (int i=0; i<n; i++,t=1-t)
{
// calculate the sum of 2k x 2k region
// Bessie can only be positioned in lattice points
int sum=0;
for (int a=max(i-k,0); a<n && a<=i+k; a++)
for (int b=max(t-k,0); b<n && b<=t+k; b++)
sum+=mat[a][b];
if (best<sum) best=sum;
// slide the region
for (int j=t+1; j+k<n; j++)
{
for (int a=max(i-k,0); a<n && a<=i+k; a++)
{
if (j-k-1>=0) sum-=mat[a][j-k-1];
sum+=mat[a][j+k];
}
// update the sum only in lattice points
if (j%2==t && best<sum) best=sum;
}
}
ofstream fout("lazy.out");
fout << best << endl;
fout.close();
}