You are given three positive integers N,x,y.
Please calculate how many permutations of 1∼N satisfies the following conditions (We denote the i-th number of a permutation by pi):
- p1=x
- pN=y
- for all 1≤i<N, |pi−pi+1|≤2
输入
The first line contains one integer T denoting the number of tests.
For each test, there is one line containing three integers N,x,y.
- 1≤T≤5000
- 2≤N≤105
- 1≤x<y≤N
输出
For each test, output one integer in a single line indicating the answer modulo 998244353.
样例输入
复制样例数据 3
4 1 4
4 2 4
100000 514 51144
样例输出
2
1
253604680
typedef long long ll;
const int mod=998244353;
const int maxn=1e5+5;
ll ans[maxn];
void getans()
{
ans[1]=ans[2]=ans[3]=1;
for(int i=4;i<=maxn;i++) ans[i]=(ans[i-3]+ans[i-1])%mod;
}
int main()
{
int T;cin>>T;
getans();
while(T--)
{
int n,x,y;
scanf("%d%d%d",&n,&x,&y);
if(x!=1) x++;
if(y!=n) y--;
cout<<ans[y-x+1]<<'\n';
}
}
计算特定排列数量
本文介绍了一个算法问题,即计算满足特定条件的1到N的排列数量。这些条件包括:第一个数为x,最后一个数为y,且任意相邻两数之差的绝对值不超过2。通过动态规划方法求解,并提供了C++代码实现。

被折叠的 条评论
为什么被折叠?



