➤ Problem Link : 463C. Gargari and Bishops
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin>>n;
ll arr[n+1][n+1];
ll cumLR[n+1][n+1];
ll cumRL[n+1][n+1];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cin>>arr[i][j];
}
int i=n-1,k,j=0;
while(i>=0)
{
for(k=i,j=0;k<n && j<n;k++,j++)
{
if(j==0)
cumLR[k][j]=arr[k][j];
else
cumLR[k][j]=arr[k][j]+cumLR[k-1][j-1];
}
i--;
}
i=1;
while(i<n)
{
for(k=0,j=i;k<n && j<n;k++,j++)
{
if(k==0)
cumLR[k][j]=arr[k][j];
else
cumLR[k][j]=arr[k][j]+cumLR[k-1][j-1];
}
i++;
}
i=0;
while(i<n)
{
for(k=0,j=i;k<n && j>=0;k++,j--)
{
if(k==0)
cumRL[k][j]=arr[k][j];
else
cumRL[k][j]=arr[k][j]+cumRL[k-1][j+1];
}
i++;
}
i=1;
while(i<n)
{
for(k=i,j=n-1;k<n && j>=0;k++,j--)
{
if(j==n-1)
cumRL[k][j]=arr[k][j];
else
cumRL[k][j]=arr[k][j]+cumRL[k-1][j+1];
}
i++;
}
int oddi=0,oddj=1,eveni=0,evenj=0;
ll oddval=-1,evenval=-1,val;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i<j)
val=cumLR[i+n-1-j][n-1];
else
val=cumLR[n-1][j+n-1-i];
//cout<<val<<" ";
if(i+j<n)
val+=cumRL[i+j][0]-arr[i][j];
else
val+=cumRL[n-1][i+j-n+1]-arr[i][j];
// cout<<val<<" ";
if((i+j)%2==1)
{
if(val>oddval)
{
oddval=val;
oddi=i+1;
oddj=j+1;
}
}
else
{
if(val>evenval)
{
evenval=val;
eveni=i+1;
evenj=j+1;
}
}
}
}
cout<<oddval+evenval<<"\n";
cout<<oddi<<" "<<oddj<<" ";
cout<<eveni<<" "<<evenj<<"\n";
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
