#include<stdio.h>
int heightarr[]={1,2,3,4,3,2,3};
int n=7;
//assuming the area of each cell to be 1 each
int A=1;
int volarr[]={0,0,0,0,0,0,0};
void fn(int index,int volpoured)
{
int vcapacity=A*heightarr[index];
if(volpoured+volarr[index]<vcapacity)
{
volarr[index]+=volpoured;
return;
}
if(volpoured+volarr[index]>vcapacity)
{
volpoured-=vcapacity-volarr[index];
volarr[index]=vcapacity;
// if the height of the adjacent left and right columns are both less then equal amt of water overflows on either sides
if(heightarr[index-1]<=heightarr[index] && heightarr[index+1]<=heightarr[index])
{
fn(index+1,volpoured/2);
fn(index-1,volpoured/2);
}
//if the left column has height greater and left has lesser then entire amt flows to left
else if(heightarr[index-1]>heightarr[index] && heightarr[index+1]<=heightarr[index]&& index!=n-1)
fn(index+1,volpoured);
//if the right column has height lesser and right has height greater then entire amt flows to right
else if(heightarr[index+1]>heightarr[index] && heightarr[index-1]<=heightarr[index] && index!=0)
fn(index-1,volpoured);
//if both left and right have height greater then water overflows at the same index
else
{
printf("overflow occurs at index %d\n",index);
return;
}
}
}
int main()
{
fn(3,19);
int sum=0;
for(int i=0;i<n;i++)
{
printf("%d\t",volarr[i]);
sum+=volarr[i];
}
printf("\namount of water trapped is %d",sum);
}
I2luY2x1ZGU8c3RkaW8uaD4KCmludCBoZWlnaHRhcnJbXT17MSwyLDMsNCwzLDIsM307CmludCBuPTc7Ci8vYXNzdW1pbmcgdGhlIGFyZWEgb2YgZWFjaCBjZWxsIHRvIGJlIDEgZWFjaAppbnQgQT0xOwppbnQgdm9sYXJyW109ezAsMCwwLDAsMCwwLDB9Owp2b2lkIGZuKGludCBpbmRleCxpbnQgdm9scG91cmVkKQp7CmludCB2Y2FwYWNpdHk9QSpoZWlnaHRhcnJbaW5kZXhdOwppZih2b2xwb3VyZWQrdm9sYXJyW2luZGV4XTx2Y2FwYWNpdHkpCnsKdm9sYXJyW2luZGV4XSs9dm9scG91cmVkOwpyZXR1cm47Cn0KaWYodm9scG91cmVkK3ZvbGFycltpbmRleF0+dmNhcGFjaXR5KQp7CnZvbHBvdXJlZC09dmNhcGFjaXR5LXZvbGFycltpbmRleF07CnZvbGFycltpbmRleF09dmNhcGFjaXR5OwovLyBpZiB0aGUgaGVpZ2h0IG9mIHRoZSBhZGphY2VudCBsZWZ0IGFuZCByaWdodCBjb2x1bW5zIGFyZSBib3RoIGxlc3MgdGhlbiBlcXVhbCBhbXQgb2Ygd2F0ZXIgb3ZlcmZsb3dzIG9uIGVpdGhlciBzaWRlcyAKaWYoaGVpZ2h0YXJyW2luZGV4LTFdPD1oZWlnaHRhcnJbaW5kZXhdICYmIGhlaWdodGFycltpbmRleCsxXTw9aGVpZ2h0YXJyW2luZGV4XSkKewpmbihpbmRleCsxLHZvbHBvdXJlZC8yKTsKZm4oaW5kZXgtMSx2b2xwb3VyZWQvMik7Cn0KLy9pZiB0aGUgbGVmdCBjb2x1bW4gaGFzIGhlaWdodCBncmVhdGVyIGFuZCBsZWZ0IGhhcyBsZXNzZXIgdGhlbiBlbnRpcmUgYW10IGZsb3dzIHRvIGxlZnQKZWxzZSBpZihoZWlnaHRhcnJbaW5kZXgtMV0+aGVpZ2h0YXJyW2luZGV4XSAmJiBoZWlnaHRhcnJbaW5kZXgrMV08PWhlaWdodGFycltpbmRleF0mJiBpbmRleCE9bi0xKQpmbihpbmRleCsxLHZvbHBvdXJlZCk7Ci8vaWYgdGhlIHJpZ2h0IGNvbHVtbiBoYXMgaGVpZ2h0IGxlc3NlciBhbmQgcmlnaHQgaGFzIGhlaWdodCBncmVhdGVyIHRoZW4gZW50aXJlIGFtdCBmbG93cyB0byByaWdodAplbHNlIGlmKGhlaWdodGFycltpbmRleCsxXT5oZWlnaHRhcnJbaW5kZXhdICYmIGhlaWdodGFycltpbmRleC0xXTw9aGVpZ2h0YXJyW2luZGV4XSAmJiBpbmRleCE9MCkKZm4oaW5kZXgtMSx2b2xwb3VyZWQpOwovL2lmIGJvdGggbGVmdCBhbmQgcmlnaHQgaGF2ZSBoZWlnaHQgZ3JlYXRlciB0aGVuIHdhdGVyIG92ZXJmbG93cyBhdCB0aGUgc2FtZSBpbmRleCAKZWxzZQp7CnByaW50Zigib3ZlcmZsb3cgb2NjdXJzIGF0IGluZGV4ICVkXG4iLGluZGV4KTsKcmV0dXJuOwp9Cgp9Cn0KaW50IG1haW4oKQp7CmZuKDMsMTkpOwppbnQgc3VtPTA7CmZvcihpbnQgaT0wO2k8bjtpKyspCnsKcHJpbnRmKCIlZFx0Iix2b2xhcnJbaV0pOwpzdW0rPXZvbGFycltpXTsKfQpwcmludGYoIlxuYW1vdW50IG9mIHdhdGVyIHRyYXBwZWQgaXMgJWQiLHN1bSk7Cn0=