用棧對隊列排序

給定一個隊列,裏面已有 N 個元素,此外還有一個空的棧(可認爲是無限大小的)。現在可以進行一系列操作,每次操作允許執行下列兩種操作之一:

  1. 把元素從隊列頭拿出來,塞到隊列尾或棧中
  2. 把元素從棧頂拿出來,塞進隊列尾

給定隊列原來的狀態和目標狀態,求問是否能夠將原來的隊列通過進行以上一系列操作變爲目標狀態。

輸入格式

一個整數 T,表示有多少組測試數據。

接下來的 T 組測試數據,每組測試數據第一行是一個正整數 N (1 <= N <= 1000),表示隊列中原來有 N 個元素。

接下來兩行,每行有 N 個數,第一行表示隊列原始狀態,第二列表示隊列目標狀態。

假設第 1 個元素總在隊列頭,第 N 個元素總在隊列尾,且所有元素都是大於等於 0 且小於 10000 的整數。

輸出格式

對於每組輸入數據,輸出 Yes 或 No,表示能否將隊列變爲目標狀態。

樣例輸入

1
5
3 2 1 4 5
1 2 3 4 5

樣例輸出

Yes

這道題目是個大陷阱,其實只要輸入和輸出數據相同,就一定能變爲目標狀態,這是個定理。
#include<stdio.h>
#include<algorithm>
using namespace std;

#define MAX 1000
int N;
int a[MAX],b[MAX];

int main()
{
	int T,i;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&N);
		for(i=0;i<N;i++)
			scanf("%d",&a[i]);
		for(i=0;i<N;i++)
			scanf("%d",&b[i]);
		sort(a,a+N);
		sort(b,b+N);
		for(i=0;i<N;i++)
			if(a[i]!=b[i])
				break;
		if(i==N)
			printf("Yes\n");
		else
			printf("No\n");
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章