➤ Problem Link : 1105D. Kilani and the Game
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define pp pair<int,int>
#define mp make_pair
int lt[]={-1,1,0,0};
int rt[]={0,0,-1,1};
bool fun(queue<pp> curr[],int p)
{
for(int i=1;i<=p;i++)
if(curr[i].size()>0)
return 1;
return 0;
}
int main()
{
int n,m,p;
cin>>n>>m>>p;
int s[p+1], ans[p+1];
for(int i=1;i<=p;i++)
{
cin>>s[i];
ans[i]=0;
}
char arr[n][m];
queue<pp> curr[p+1];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>arr[i][j];
if(arr[i][j]>='1' && arr[i][j]<='9')
curr[arr[i][j]-'0'].push(mp(i,j));
}
queue<pp> q;
int t,sz,x,y;
pp pr;
while(fun(curr,p))
{
for(int i=1;i<=p;i++)
{
q=curr[i];
t=s[i];
while(!q.empty() && t--)
{
sz=q.size();
while(sz--)
{
pr=q.front();
q.pop();
for(int j=0;j<4;j++)
{
x=pr.first+lt[j];
y=pr.second+rt[j];
if(x>=0 && x<n && y>=0 && y<m && arr[x][y]=='.')
{
// cout<<"aa";
arr[x][y]=i+48;
// cout<<x<<" "<<y<<" "<<arr[x][y]<<endl;
q.push(mp(x,y));
}
}
}
}
curr[i]=q;
}
}
/* for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
cout<<arr[i][j]<<" ";
cout<<endl;
}*/
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(arr[i][j]>='1' && arr[i][j]<='9')
ans[arr[i][j]-'0']++;
}
for(int i=1;i<=p;i++)
cout<<ans[i]<<" ";
}
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!!
