All pastes #344114 Raw Edit

Someone

public cpp v1 · immutable
·published 2007-02-07 15:20 UTC
rendered paste body
#include <stdio.h>#include <string.h>char inp[100];int minlevel,maxlevel;int found = 0;struct fract{	int nr,dr;	int width;};int max(int x,int y){	if(x > y)		return x;	return y;}struct fract process(char* x,int level){		int len = 0;	int i = 0;	len = strlen(x);	//now the return conditions	if(len <= 1)	{		struct fract temp;		temp.dr = 0;		temp.nr = 0;		temp.width = len;		return temp;	}	//string does not hav / 	int slashfound = 0;	int top = 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++;		struct fract temp;		temp.nr = 0;		temp.dr = 0;		temp.width = count;		return temp;	}	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;	struct fract ans;	ans.width = 0;	ans.nr = 0;	ans.dr = 0;		//skip the non '{' symbols	for(i = 0;i < len && x[i] != '{';i++,(ans.width)++);	do	{		if(x[i] == '{')			top++;		else if(x[i] == '}')			top--;		nr[nrlen++] = x[i++];	}while(top > 0 && i < len);	nr[nrlen-1] = '\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);		de[delen-1] = '\0';		struct fract x,y;		x = process(nr+1,level+1);		y = process(de+1,level-1);		ans.width += 2 + max(x.width,y.width);		ans.nr += 1 + x.nr + x.dr;		ans.dr += 1 + y.nr + y.dr;					}	struct fract temp;	temp =  process(x+i,level);	ans.nr = max(ans.nr,temp.nr);	ans.dr = max(ans.dr,temp.dr);	ans.width += temp.width;	return ans;}int main(){	scanf("%s",inp);	struct fract ans;	ans = process(inp,0);	if(found)		printf("%d %d",ans.width,1+ans.nr+ans.dr);	else		printf("%d 1",ans.width);	return 0;}