poj 2295 A DP Problem

有点繁杂的一道题,不过还是耐心的A了它,真开心~~

注意输出,题目要求不大于最大整数,也是就说如果是3.5,输出3,如果是-3.5,输出-4.

#include <stdio.h>
#include <math.h>

int main()
{
	int T,a,X,Y,flag;
	char s[300],*p,*q;
	scanf("%d",&T);
	while (T--)
	{
		scanf("%s",s);
		q=p=s;
		X=Y=0;
		flag=1;
		while (flag)//‘=’前部分
		{
			a=0;
			if (*p>='0'&&*p<='9')
			{
				q=p;
				while (*p>='0'&&*p<='9')
				{
					a*=10;
					a+=*p-'0';
					p++;
				}
				if(*p=='=')flag=0;
			}
			if(*p=='x')//如果是x的系数
			{
				if (q==s||*(q-1)=='+')//如果系数是正	
					X+=a;
				else X-=a;
			}
			else
			{
				if(q==s||*(q-1)=='+')
					Y+=a;
				else Y-=a;
			}
			p++;
			if(*p=='=')flag=0;
		}
		if(*p!='=')p--;
		while (*p++)//‘=’后部分
		{
			a=0;
			if (*p>='0'&&*p<='9')
			{
				q=p;
				while (*p>='0'&&*p<='9')
				{
					a*=10;
					a+=*p-'0';
					p++;
				}
			}
			if (*p=='x')//如果是x的系数
			{
				if(*(q-1)=='='||*(q-1)=='+')//如果系数是正
					X-=a;
				else X+=a;
			}
			else
			{
				if(*(q-1)=='='||*(q-1)=='+')
					Y-=a;
				else Y+=a;
			}
		}
		p=s;
		while (*p!='=')
		{
		    if(*p=='x')
			{	
				if(p==s)X+=1;
				else if(*(p-1)=='+')X+=1;
				else if(*(p-1)=='-')X-=1;
			}
			p++;
		}
		while (*p++)
		{
		    if(*p=='x')
			{	
				if(*(p-1)=='=')X-=1;
				else if(*(p-1)=='+')X-=1;
				else if(*(p-1)=='-')X+=1;
			}
		}
		if(X==0&&Y==0)
		{
			printf("IDENTITY\n");
		}
		else if(X==0&&Y!=0)
		{
			printf("IMPOSSIBLE\n");
		}
		else
		{
			printf("%d\n",(int)floor(Y*1.0/-X));
		}
	}
	return 0;
}
posted @ 2011-10-21 11:51  104_gogo  阅读(281)  评论(0编辑  收藏  举报