【HDU 6630】多校第五場 permutation 2(找規律)

題目鏈接:傳送門

題意:

T組測試樣例,每組測試樣例輸入N,X,Y,N代表一個數組的長度,X代表數組的第一個數,Y代表數組的最後一個數,問排列1~N有多少種可能,並且滿足 \left | P_{i}-P_{i+1} \right |\leqslant 2,(1≤i<N) 。

思路:

由題意我們可以把x,y分爲4種情況,即x=1且y=n,x=1但y!=n,x!=1但y=n,x!=1且y!=n這4種情況,下面分情況討論:

① x=1且y=n

此時,可以得出排列的可能有a [ i ] = a [ i - 1 ] + a [ i - 3 ]種;

② x=1但y!=n(爲了方便找出規律,假設n=7)

此時,多舉幾個栗子,你會發現y-1到n的數排列方式是確定的,只有一種,觀察出此時排列的可能有a [ y - 1 ] 種;

③ x!=1但y=n (爲了方便找出規律,假設 n=7)

此時,多列出一些式子,你會發現1到x+1的排列方式是確定的,只有一種,觀察此時排列的可能一共a [ n - x ] 種;

④x!=1且y!=n(爲了方便找出規律,假設 n=7)

觀察此時分兩種情況,若y = x+1,則排列爲0;否則,排列一共有a [ y - x - 1] 種;

一個栗子不具有代表性,自己在做的時候可以多整幾個栗子測試一下。

My  Code:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<queue>
#include<math.h>
#include<set>
#include<time.h>
#pragma GCC optimize(2)
using namespace std;
#define INF 1e9
typedef long long ll;
typedef unsigned long long ull;
#define PI acos(-1)
ll a[100005];
int main()
{
    a[1] = a[2] = a[3] = 1;
    for(int i = 4; i <= 100000; i++)
        a[i] = (a[i-1] + a[i-3]) % 998244353;
    int t,n,x,y;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&n,&x,&y);
        if(x == 1 && y == n) cout << a[n] << endl;
        else if(x == 1) cout << a[y-1] << endl;
        else if(y == n) cout << a[n-x] <<endl;
        else if(y == x + 1) printf("0\n");
        else cout << a[(y-1)-(x+1)+1] << endl;
    }
}

 

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