杭电1002http://acm.hdu.edu.cn/showproblem.php?pid=1022
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 25276 Accepted Submission(s): 9529
代码1:
1 #include<cstdio> 2 #include<string> 3 #include<iostream> 4 #define N 20 5 using namespace std; 6 string sc[N]; 7 string in,out; 8 char str[N]; 9 int main() 10 { 11 int t ,i , j ,c , k ; 12 while(~scanf("%d",&t)) 13 { 14 in.clear();out.clear(); 15 cin>>in>>out; 16 j = 0;c =0 ; k =0; 17 for( i = 0 ; i < t ; i++ ) 18 { 19 str[c]=in[i]; 20 sc[k++]="in"; 21 while(c!=-1&&str[c]==out[j])//这儿有点问题,c=0这儿有歧义,有时候栈为空,有时候不空,最好别这么写 22 //也就是,str有变化的时候,第一时间修改c的值 23 //这儿就是用混了,写成了c != 0,事实上,这儿c=0的时候,栈里还有一个元素 24 { 25 sc[k++] = "out"; 26 c--;j++; 27 } 28 c++; 29 } 30 if(j==t) {printf("Yes.\n"); 31 for( i = 0 ;i < k ; i++) 32 printf("%s\n", sc[i].c_str());} //string是不可以printf的,要用c_str函数,转为字符数组 33 else printf("No.\n"); 34 printf("FINISH\n");//少了换行 35 } 36 //system("PAUSE"); 37 return 0; 38 }
代码2:
1 #include<stdio.h> 2 #include<string.h> 3 #include<stack> 4 using namespace std; 5 int main() 6 { 7 int n, i, j, k, flag[50]; 8 char s1[15], s2[15]; 9 stack <char> s; 10 while(~scanf("%d %s%s",&n,s1,s2)) 11 { 12 while(!s.empty()) s.pop(); //也可以不写这一句,把 stack <char> s; 就可以了 13 memset(flag,-1,sizeof(flag)); 14 j = k = 0; 15 for(i = 0; i < n; i++) 16 { 17 s.push(s1[i]); 18 flag[k++] = 1; 19 while(!s.empty() && s.top() == s2[j]) 20 { 21 flag[k++] = 0; 22 s.pop(); 23 j++; 24 } 25 } 26 if(j == n) 27 { 28 printf("Yes.\n"); 29 for(i = 0; i < k; i++) 30 { 31 if(flag[i]) 32 printf("in\n"); 33 else 34 printf("out\n"); 35 } 36 } 37 else 38 printf("No.\n"); 39 printf("FINISH\n"); 40 } 41 return 0; 42 }
代码3:(感谢提供代码的伟大帅气的松哥~)
1 #include <cstdio> 2 using namespace std; 3 4 int main() 5 { 6 int n; 7 char o1[20], o2[20]; 8 int stack[20]; 9 bool ans[20]; 10 while(~scanf("%d", &n)) 11 { 12 scanf("%s %s", o1, o2); 13 int top = 0, cur = 0, c = 0; 14 for(int i = 0; i < n; i++) 15 { 16 stack[top++] = o1[i]-'0'; 17 ans[c++] = 1; 18 while(top > 0 && stack[top-1] == o2[cur]-'0') 19 { 20 top--; 21 cur++; 22 ans[c++] = 0; 23 } 24 } 25 if(top > 0) puts("No."); 26 else 27 { 28 puts("Yes."); 29 for(int i = 0; i < c; i++) 30 { 31 if(ans[i] == 0) puts("out"); 32 else puts("in"); 33 } 34 } 35 puts("FINISH"); 36 } 37 return 0; 38 }