permutation 2

permutation 2

猜了发结论过了==

$N$个数的全排列,$p_{1}=x,p_{2}=y$要求$|p_{i+1}-p_{i}|<=2|$求满足条件的排列个数。

首先考虑$x=1,y=N$的情形,对任意$N$有$f(N)=f(N-1)+f(N-3)$成立,对于$x!=0$的情形,考虑先把$x$之前的数都排掉,对于$y!=N$考虑把$y$之后的数排完,这些数排列好像唯一???

然后就是$x+1~y-1$之间排,类似排$1~y-x-1$

#include<bits/stdc++.h>
using namespace std;
int T;
typedef long long ll;
ll A[100004];
ll mod=998244353;
void init()
{
    A[1]=1;
    A[2]=1;
    A[3]=1;
    for(int i=4;i<=100000;i++){
        A[i]=(A[i-1]+A[i-3])%mod;
    }
}
int main()
{
    init();
    scanf("%d",&T);
    ll a,b;
    ll N;
    while(T--){
        scanf("%lld%lld%lld",&N,&a,&b);
        if(a>b)swap(a,b);
        if(a!=1)
        a+=1;
        if(b!=N)
        b-=1;
        cout<<A[b-a+1]<<'\n';
    }


}

 

上一篇:字典序全排序【permutation】+火车进出站


下一篇:python – 获取有向图的所有边对. networkx