cdoj 847 方老师与栈 火车进出战问题

//其实我是不想写这题的,但是这题让我想起了我年轻的时候

解法:直接模拟栈就好。

//另外我年轻时候做的那题数据范围比较小,原理也不一样。

//对于序列中的任何一个数其后面所有比它小的数应该是倒序的,因此对于任意三个数a,b,c(按顺序),若b<a c<a 则有b>c

 1 #include<cstdio>

 2 #include<iostream>

 3 #include<cmath>

 4 #include<algorithm>

 5 #include<cstring>

 6 #include<cstdlib>

 7 #include<queue>

 8 #include<vector>

 9 #include<map>

10 #include<stack>

11 #include<string>

12 

13 using namespace std;

14 

15 int n;

16 int a[1000007];

17 int b[1000007];

18 int stk[1000007];

19 int top=0;

20 int nowb=0;

21 

22 int main(){

23     scanf("%d",&n);

24     for (int i=0;i<n;i++) scanf("%d",&a[i]);

25     for (int i=0;i<n;i++) scanf("%d",&b[i]);

26     for (int i=0;i<n;i++){

27             stk[++top]=a[i];

28             while (top>0 && stk[top]==b[nowb]){

29                     top--;

30                     nowb++;

31             }

32     }

33     if (nowb==n)

34         printf("Yes\n");

35     else

36         printf("No\n");

37     return 0;

38 }

39 /*

40 3

41 3 2 1

42 1 2 3

43 

44 4

45 1 2 3 4

46 3 1 2 4

47 */

 

你可能感兴趣的:(问题)