| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:GCC提交WA,C提交RE,我汗~~In Reply To:GCC提交WA,C提交RE,我汗~~ Posted by:yzhw at 2009-03-22 16:52:51 > # include <stdio.h>
> # include <string.h>
> # include <stdlib.h>
> typedef struct
> {
> int p;
> char c;
> }sig;
> int total;
> int eq[100],len;
> __int64 cul(__int64 a,__int64 b,char c)
> {
> if(c=='+') return a+b;
> else if(c=='-') return a-b;
> else return a*b;
> }
> int chk()
> {
> sig stack2[50];
> __int64 stack1[50];
> int top1=-1,top2=-1,i,p=1;
> for(i=1;i<=len;i++)
> {
> if(eq[i]=='(') p++;
> else if(eq[i]==')')
> {
> p--;
> stack1[top1-1]=cul(stack1[top1-1],stack1[top1],stack2[top2].c);
> top1--;
> top2--;
> }
> else if(eq[i]=='-'||eq[i]=='+'||eq[i]=='*')
> {
> if(top2==-1||p>stack2[top2].p)
> {
> stack2[++top2].p=p;
> stack2[top2].c=(char)eq[i];
> }
> else
> {
> stack1[top1-1]=cul(stack1[top1-1],stack1[top1],stack2[top2].c);
> top1--;
> stack2[top2].c=(char)eq[i];
> stack2[top2].p=p;
> }
> }
> else stack1[++top1]=eq[i];
> }
> if(top1) stack1[top1-1]=cul(stack1[top1-1],stack1[top1],stack2[top2].c);
> if(stack1[0]==total) return 1;
> else return 0;
> }
>
> int det(int num)
> {
> if(num>len)
> {
> return chk();
> }
> else if(eq[num]!=' ') return det(num+1);
> else
> {
> eq[num]='+';
> if(det(num+1)) return 1;
> eq[num]='-';
> if(det(num+1)) return 1;
> eq[num]='*';
> if(det(num+1)) return 1;
> return 0;
> }
> }
> int main()
> {
> int casenum=1;
>
> while(1)
> {
> char temp[1000],*t;
> int i;
> scanf("%d",&total);
> if(!total) break;
> scanf(" = ");
> gets(temp);
> printf("Equation #%d:\n",casenum++);
> len=0;
> t=strtok(temp," ");
> while(t!=NULL)
> {
> if(t[0]=='(')
> {
> eq[++len]='(';
> t=t+1;
> }
> eq[++len]=atoi(t);
> if(t[strlen(t)-1]==')')
> {
> eq[++len]=')';
> t[strlen(t)-1]='\0';
> }
> eq[++len]=' ';
> t=strtok(NULL," ");
> }
> len--;
> if(det(1))
> {
> printf("%d=",total);
> for(i=1;i<=len;i++)
> {
> if(eq[i]!='+'&&eq[i]!='-'&&eq[i]!='*'&&eq[i]!='('&&eq[i]!=')') printf("%d",eq[i]);
> else printf("%c",eq[i]);
> }
> printf("\n");
>
> }
> else printf("Impossible\n");
> printf("\n");
> }
> }
>
这种程序都能AC,POJ真是可以了,随便数个字串进去都是错了,竟然输出Impossible!
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator