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 |
你贴出这么一堆东西是比较轻松的,看你代码的人估计要累死...In Reply To:苍天啊,大地啊!谁给我出这口客气,为啥老是WA!! Posted by:xuguangshengqq at 2007-04-13 13:14:27 > > 以下是我的代码 > 我是 按优先级顺序 ~ > & > ^ > | > 处理的 > 希望牛人给个本程序错误的数据!! > 跪求!!! > 多谢!!!!! > > > #include <iostream.h> > #include <memory.h> > #include<stdio.h> > > struct stack{ > int top; > char data[300]; > }; > struct boolStack{ > int top; > bool data[300]; > }; > > char a[300]; > char d1[300]; > char d2[300]; > > stack ss1,ss2; > boolStack ss3; > bool used[100]; > int idx[100]; > bool ever[100]; > int n; > > > > int getIndex(); > void getHouZhuiShi(int front,int rear); > bool getValue(char *d,int ld); > > void main(){ > int i,j,k,ld1,ld2; > int num; > int len; > int index = 0; > cin>>num; > for(i=1;i<=num;i++){ > gets(a+1); > j=1; > n = 1; > memset(ever,0,sizeof(ever)); > while(a[j]){ > if(a[j]>='a'&&a[j]<='z'&&!ever[a[j]-'a'+1]) > { > ever[a[j]-'a'+1] = true; > idx[a[j]-'a'+1] = n; > n++; > } > j++; > } > len = j-1; > n--; > index = getIndex(); > getHouZhuiShi(1,index); > j=1; > ld1 = ss1.top + 1; > while(ss1.top>=0) > { > d1[j++] = ss1.data[ss1.top--]; > } > getHouZhuiShi(index+1,len); > j = 1; > ld2 = ss1.top+1; > while(ss1.top>=0) > {//cout<<"ss1.top = "<<ss1.top<<endl; > d2[j++] = ss1.data[ss1.top--]; > } > // cout<<"d1 = "<<(d1+1)<<endl; > // cout<<"d2 = "<<(d2+1)<<endl; > memset(used,0,sizeof(used)); > //cout<<"memset"<<endl; > bool b1,b2; > bool flag = true; > while(!used[n+1]){ > //for(k=1;k<=n;k++){ > //cout<<used[k]<<","; > //}cout<<endl; > b1 = getValue(d1,ld1); > b2 = getValue(d2,ld2); > // cout<<"b1 = "<<b1<<", b2 = "<<b2<<endl; > if(b1!=b2){ > flag = false; > break; > } > j = 1; > while(used[j]){used[j] = false;j++;} > used[j] = true; > } > if(flag){ > cout<<"Data set "<<i<<": Equivalent"<<endl; > } > else cout<<"Data set "<<i<<": Different"<<endl; > > } > return; > } > > > bool getValue(char *d,int ld){ > int i; > i = 1; > bool a1,a2; > ss3.top = -1; > while(i<=ld){ > //cout<<"d["<<i<<"] = "<<d[i]<<endl; > if(d[i]>='a'&&d[i]<='z'){ > while(d[i]>='a'&&d[i]<='z'){ > ss3.data[++ss3.top] = used[idx[d[i]-'a'+1]]; > i++; > } > continue; > } > switch(d[i]){ > case '|': > a1 = ss3.data[ss3.top--]; > a2 = ss3.data[ss3.top--]; > ss3.data[++ss3.top] = (a1||a2); > break; > case '&': > a1 = ss3.data[ss3.top--]; > a2 = ss3.data[ss3.top--]; > ss3.data[++ss3.top] = (a1&&a2); > break; > case '^': > a1 = ss3.data[ss3.top--]; > a2 = ss3.data[ss3.top--]; > ss3.data[++ss3.top] = (!a1&&a2||a1&&!a2); > break; > case '~': > a1 = ss3.data[ss3.top--]; > ss3.data[++ss3.top] = (!a1); > break; > } > > > > i++; > } > return ss3.data[0]; > > return false; > } > > > > > > > > > > > void printss1(){ > int i; > cout<<"ss1 : "; > for(i=0;i<=ss1.top;i++){ > cout<<ss1.data[i]; > }cout<<endl; > } > void printss2(){ > int i; > cout<<"ss2 : "; > for(i=0;i<=ss2.top;i++){ > cout<<ss2.data[i]; > }cout<<endl; > } > > > > > > void getHouZhuiShi(int front,int rear){ > int i; > //cout<<"front = "<<front<<endl; > //cout<<"rear = "<<rear<<endl; > ss1.top = -1;//符号栈 > ss2.top = -1;//数字栈 > char ch; > for(i=front;i<=rear;i++){ > switch(a[i]){ > case 'a': > case 'b': > case 'c': > case 'd': > case 'e': > case 'f': > case 'g': > case 'h': > case 'i': > case 'j': > case 'k': > case 'l': > case 'm': > case 'n': > case 'o': > case 'p': > case 'q': > case 'r': > case 's': > case 't': > case 'u': > case 'v': > case 'w': > case 'x': > case 'y': > case 'z': > ss2.data[++ss2.top] = a[i]; > break; > case '|': > while(ss1.top>=0){ > ch = ss1.data[ss1.top--]; > if(ch == '('){ > ss1.data[++ss1.top] = ch; > break; > } > ss2.data[++ss2.top] = ch; > } > ss1.data[++ss1.top] = a[i]; > break; > > case '^': > while(ss1.top>=0){ > ch = ss1.data[ss1.top--]; > if(ch == '('||ch=='|'){ > ss1.data[++ss1.top] = ch; > break; > } > ss2.data[++ss2.top] = ch; > } > ss1.data[++ss1.top] = a[i]; > break; > case '&': > while(ss1.top>=0){ > ch = ss1.data[ss1.top--]; > if(ch == '('||ch=='|'||ch=='&'){ > ss1.data[++ss1.top] = ch; > break; > } > ss2.data[++ss2.top] = ch; > } > ss1.data[++ss1.top] = a[i]; > break; > > > > case '~': > while(ss1.top>=0){ > ch = ss1.data[ss1.top--]; > if(ch == '('||ch=='|'||ch=='&'||ch=='^'||ch=='~'){ > ss1.data[++ss1.top] = ch; > break; > } > ss2.data[++ss2.top] = ch; > } > ss1.data[++ss1.top] = a[i]; > break; > case '(': > ss1.data[++ss1.top] = a[i]; > break; > case ')': > while(ss1.top>=0){ > ch = ss1.data[ss1.top--]; > if(ch == '(') break; > ss2.data[++ss2.top] = ch; > } > break; > > > default: break; > } > // printss1(); > // printss2(); > } > while(ss2.top>=0){ > ss1.data[++ss1.top] = ss2.data[ss2.top--]; > } > //int top = ss1.top; > //while(top>=0){ > //cout<<ss1.data[top--]; > //} > //cout<<endl; > } > > > > > > int getIndex(){//区分两个 式子 > bool v=false,p=true; > int i = 1; > while(a[i]){ > //cout<<"v = "<<v<<", p = "<<p<<endl; > if(v&&p&&(!(a[i]==' '||a[i]=='|'||a[i]=='&'||a[i]=='^'))) > { > return (i-1); > } > else{ > if(a[i]>='a'&&a[i]<='z') > { > v = true; > } > else if (a[i] == '~') > { > v = false; > } > else if(a[i]=='|'||a[i]=='^'||a[i]=='&') > { > v = false; > } > else if(a[i]=='(') > { > v = true; > p = false; > } > else if(a[i]==')'){ > p = true; > } > } > i++; > } > return -1; > } > > > > > > > > > > /* > */ Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator