All pastes #74779 Raw Edit

Untitled

public text v1 · immutable
#74779 ·published 2006-06-29 13:06 UTC
rendered paste body
#include <stdio.h>
#include <string.h>

char inp[100];

int minlevel,maxlevel;
int found = 0;


int max(int x,int y)
{
	if(x > y)
		return x;
	return y;
}



int process(char* x,int level)
{
	
	int len = 0;
	int i = 0;
	len = strlen(x);

	//now the return conditions
	if(len <= 1)
		return len;
	//string does not hav / 
	int slashfound = 0;
	for(i = 0;i < len;i++)
		if(x[i] == '/')
		{
			slashfound = 1;
			break;
		}

	if(!slashfound)
	{
		int count = 0;
		for(i = 0;i < len;i++)
			if(x[i] != '{' && x[i] != '}')
				count++;
		return count;
	}

	if(minlevel > level)
		minlevel = level;
	if(maxlevel < level)
		maxlevel = level;
	found = 1;

	//if the string has / then return the max of the process of numerator and denominator

	char nr[100];
	int nrlen = 0;
	char de[100];
	int delen = 0;
	int ans = 0;
	int top = 0;

	//skip the non '{' symbols

	for(i = 0;i < len && x[i] != '{';i++,ans++);

	do
	{
		if(x[i] == '{')
			top++;
		else if(x[i] == '}')
			top--;
		nr[nrlen++] = x[i++];
	}while(top > 0 && i < len);

	
	if(nrlen > 1)
		nr[nrlen-1] = '\0';
	else
		nr[nrlen] = '\0';

	//now we hav the numerator


	if(x[i] == '/')
	{
		i++;
		do
		{
			if(x[i] == '{')
				top++;
			else if(x[i] == '}')
				top--;
			de[delen++] = x[i++];
		}while(top > 0 && i < len);

		if(delen > 1)
			de[delen-1] = '\0';
		else
			de[delen] = '\0';

		int x,y;
		if(nrlen == 1)
			x = process(nr,level+1);
		else
			x = process(nr+1,level+1);

		if(delen == 1)
			y = process(de,level-1);
		else
			y = process(de+1,level-1);

		ans += max(x,y);
		ans += 2;

		
	}
	else
		ans += process(nr+1,level);
	ans += process(x+i,level);
	return ans;

}


int main()
{
	scanf("%s",inp);
	int ans;
	ans = process(inp,0);
	if(found)
		printf("%d %d",ans,(2*(1+maxlevel - minlevel))+1);
	else
		printf("%d 1",ans);
	return 0;
}