225C. Barcode - Codeforces Solution C++

  Problem Link : 225C. Barcode 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;

#define ll long long int

int main()
{
	int n,m,x,y;
	cin>>n>>m>>x>>y;
	char arr[n+1][m+1];
	int whites[m+1]={0};
	ll cum[m+1];
	pair<ll,ll> minPixels[m+1];
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='.')
				whites[j]++;
		}
		
	}

	
	cum[0]=0;
	cum[1]=whites[1];
	for(int i=2;i<=m;i++)
		cum[i]=whites[i]+cum[i-1];
    
    minPixels[0].first=minPixels[0].second=0;
	for(int i=1;i<=m;i++)
	{
		minPixels[i].first=minPixels[i].second=INT_MAX;
		for(int j= i-x+1;j>=i-y+1 && j>=1 ;j--)
		{
			minPixels[i].second=min(minPixels[i].second,cum[i]-cum[j-1]+minPixels[j-1].first);
			minPixels[i].first=min(minPixels[i].first,(i-j+1)*n - cum[i]+cum[j-1] + minPixels[j-1].second);
		}
	//	cout<<i<<" "<<minPixels[i].first<<" "<<minPixels[i].second<<"\n";
	}

	cout<<min(minPixels[m].first,minPixels[m].second);

}

 

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

  Problem Link : 225C. Barcode 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;

#define ll long long int

int main()
{
	int n,m,x,y;
	cin>>n>>m>>x>>y;
	char arr[n+1][m+1];
	int whites[m+1]={0};
	ll cum[m+1];
	pair<ll,ll> minPixels[m+1];
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='.')
				whites[j]++;
		}
		
	}

	
	cum[0]=0;
	cum[1]=whites[1];
	for(int i=2;i<=m;i++)
		cum[i]=whites[i]+cum[i-1];
    
    minPixels[0].first=minPixels[0].second=0;
	for(int i=1;i<=m;i++)
	{
		minPixels[i].first=minPixels[i].second=INT_MAX;
		for(int j= i-x+1;j>=i-y+1 && j>=1 ;j--)
		{
			minPixels[i].second=min(minPixels[i].second,cum[i]-cum[j-1]+minPixels[j-1].first);
			minPixels[i].first=min(minPixels[i].first,(i-j+1)*n - cum[i]+cum[j-1] + minPixels[j-1].second);
		}
	//	cout<<i<<" "<<minPixels[i].first<<" "<<minPixels[i].second<<"\n";
	}

	cout<<min(minPixels[m].first,minPixels[m].second);

}

 

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