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; }