CF#637 C. Nastya and Strange Generator

C. Nastya and Strange Generator

題意

有一個隨機全排列生成器,給出你一個全排列,讓判斷是否能夠經過這個生成器產生。c++

生成器工做方式:spa

第i步爲數字i尋找位置pos。code

首先pos是一個空位置,定義每一個空位置的價值爲左邊連續有數字的位置數,會爲數字i在價值最大的一個或者多個位置中選擇一個位置。blog

好比上圖,第三個位置的值是2,第4個位置的值是0,這時4就選擇了第3個位置。get

思路

寫一下就會發現,這個生成器生成的全排列是有規律的。generator

n的全排列it

x+y+1 x+y+2.....n x+1 x+2... x+y 1 2 3 4.......xast

能夠知道若是當前位小於後一位,必定是小1。若是有不是小1的,就說明不能經過生成器生成class

代碼

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
const int N=2e5+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;

int arr[N],vis[N];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&arr[i]);
        int flag=0;
        for(int i=n;i>1;i--)
        {
            if(arr[i]>arr[i-1])
            {
                if(arr[i]-arr[i-1]!=1)
                {
                    flag=1;
                    break;
                }
            }
        }
        if(flag) printf("No\n");
        else printf("Yes\n");
    }
    return 0;
}
相關文章
相關標籤/搜索