給定一個隊列,裏面已有 N 個元素,此外還有一個空的棧(可認爲是無限大小的)。現在可以進行一系列操作,每次操作允許執行下列兩種操作之一:
- 把元素從隊列頭拿出來,塞到隊列尾或棧中
- 把元素從棧頂拿出來,塞進隊列尾
給定隊列原來的狀態和目標狀態,求問是否能夠將原來的隊列通過進行以上一系列操作變爲目標狀態。
輸入格式
一個整數 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");
}
}