标签:
Description
Input
Output
Sample Input 3 123 321 3 123 312 Sample Output Yes. in in in out out out FINISH No. FINISH For the first Sample Input, we let train 1 get in, then train 2 and train 3. So now train 3 is at the top of the railway, so train 3 can leave first, then train 2 and train 1. In the second Sample input, we should let train 3 leave first, so we have to let train 1 get in, then train 2 and train 3. Now we can let train 3 leave. But after that we can‘t let train 1 leave before train 2, because train 2 is at the top of the railway at the moment. So we output "No.".
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1022
*********************************************
题意:n辆车,以序列1的方式进站,问出站是否能以序列2的方式,并输出步骤。
分析:使用栈。
AC代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<queue> 5 #include<algorithm> 6 #include<time.h> 7 #include<stack> 8 #include<vector> 9 using namespace std; 10 #define N 120 11 #define INF 0x3f3f3f3f 12 13 int main() 14 { 15 stack<char >s; 16 int n,p[N]; 17 char s1[N],s2[N]; 18 19 while(scanf("%d", &n) != EOF) 20 { 21 scanf("%s %s", s1,s2); 22 23 memset(p,0,sizeof(p)); 24 s.push(s1[0]);///第一个元素进栈 25 p[0]=1;///记录进来的第一个 26 27 int i=0,j=0,k=1; 28 while(i<n&&j<n) 29 { 30 if(s.size()&&s.top()==s2[j])///如果栈顶元素与序列2当前的元素相等,则弹栈,序列2集体向后 31 { 32 j++; 33 s.pop(); 34 p[k++]=0; 35 } 36 else///否则从序列1中取当前元素压入栈中。 37 { 38 if(i==n) 39 break; 40 s.push(s1[++i]); 41 p[k++]=1; 42 } 43 } 44 45 if(i==n)///如果I==N表示栈顶元素不等于序列2当前元素,且序列1中元素都已经入过栈,判断不能得到序列2一样的答案。 46 printf("No.\n"); 47 else 48 { 49 printf("Yes.\n"); 50 for(int i=0; i<k; i++) 51 { 52 if(p[i])///p[i] 1是进,0是出 53 printf("in\n"); 54 else 55 printf("out\n"); 56 } 57 58 } 59 printf("FINISH\n"); 60 } 61 return 0; 62 }
标签:
原文地址:http://www.cnblogs.com/weiyuan/p/5800549.html