463C. Gargari and Bishops - Codeforces Solution C++

  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!!