| ||||||||||
| 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 | |||||||||
UPIn Reply To:WA all the time.who can tell me why?Plz Posted by:HouXran at 2007-10-10 14:01:11 > #include <stdio.h>
> #include <string.h>
> #define HASH 20000
> #define N 100
>
> int hash[HASH];
> char s[N];
> int stack[N];
> int top;
>
> bool empty()
> {
> if(top>0) return false;
> else return true;
> }
>
> void push(int n)
> {
> stack[top]=n;
> top++;
> }
>
> int pop()
> {
> top--;
> return stack[top];
> }
>
> void init()
> {
> memset(hash,0xff,sizeof(hash));
> }
>
> void get_first()
> {
> int i,m,l,k;
> int sum;
> while(1)
> {
> scanf("%s",s);
> if(strcmp(s,"END_OF_FIRST_PART")==0) break;
> scanf("%d",&m);
> l=strlen(s);
> sum=s[0]-'A';
> k=26;
> for(i=1;i<l;i++)
> {
> sum+=(s[i]-'a')*k;
> k*=26;
> }
> hash[sum]=m;
> }
> }
>
> //( -10 )
> int count()
> {
> int i,j,k,m;
> int len;
> int tmp;
> char du[N];
> int dtop;
>
> len=strlen(s);
> dtop=0;
> top=0;
> i=0;
> while(i<len)
> {
> if(s[i]=='(')
> {
> if(dtop>0)
> {
> m=0;
> k=1;
> for(j=0;j<dtop;j++)
> {
> m+=(du[j]-'a')*k;
> k*=26;
> }
> dtop=0;
> if(hash[m]==-1) return -1;
> push(hash[m]);
> }
> push(-10);
> i++;
> }
> else if(s[i]==')')
> {
> if(dtop>0)
> {
> m=0;
> k=1;
> for(j=0;j<dtop;j++)
> {
> m+=(du[j]-'a')*k;
> k*=26;
> }
> dtop=0;
> if(hash[m]==-1) return -1;
> push(hash[m]);
> }
> int tt=pop();
> tmp=0;
> while(tt!=-10)
> {
> tmp+=tt;
> tt=pop();
> }
> push(tmp);
> i++;
> }
> else if(s[i]>='0' && s[i]<='9')
> {
> if(dtop>0)
> {
> m=0;
> k=1;
> for(j=0;j<dtop;j++)
> {
> m+=(du[j]-'a')*k;
> k*=26;
> }
> dtop=0;
> if(hash[m]==-1) return -1;
> push(hash[m]);
> }
> tmp=pop();
> if(i+1<len && s[i+1]>='0' && s[i+1]<='9')
> {
> tmp*=(s[i]-'0')*10+s[i+1]-'0';
> push(tmp);
> i+=2;
> }
> else
> {
> tmp*=s[i]-'0';
> push(tmp);
> i++;
> }
> }
> else if(s[i]>='A' && s[i]<='Z')
> {
> if(dtop>0)
> {
> m=0;
> k=1;
> for(j=0;j<dtop;j++)
> {
> m+=(du[j]-'a')*k;
> k*=26;
> }
> if(hash[m]==-1) return -1;
> push(hash[m]);
> dtop=0;
> }
> du[dtop]='a'+s[i]-'A';
> dtop++;
> i++;
> }
> else if(s[i]>='a' && s[i]<='z')
> {
> du[dtop]=s[i];
> dtop++;
> i++;
> }
> }
> if(dtop>0)
> {
> m=0;
> k=1;
> for(j=0;j<dtop;j++)
> {
> m+=(du[j]-'a')*k;
> k*=26;
> }
> if(hash[m]==-1) return -1;
> push(hash[m]);
> dtop=0;
> }
> tmp=0;
> while(empty()==false)
> {
> int kk=pop();
> tmp+=kk;
> }
> return tmp;
> }
>
> int main()
> {
> init();
> get_first();
> while(1)
> {
> scanf("%s",s);
> if(strcmp(s,"0")==0) break;
> int k=count();
> if(k==-1) printf("UNKNOWN\n");
> else printf("%d\n",k);
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator