Problem Description
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):
1. p1=x
2. pN=y
3. for all 1≤i<N, |pi−pi+1|≤2
Input
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
Output
For each test, output one integer in a single line indicating the answer modulo 998244353.
Sample Input
3 4 1 4 4 2 4 100000 514 51144
Sample Output
2 1 253604680
Source
2019 Multi-University Training Contest 5
Recommend
liuyiding
题意:给你1-N个数字。给你x,y。p1=x,pN=y,且|pi-pi+1|<=2。求有几种排列方式。
思路:打表,找到规律,会发现是f[i]=(f[-1]+f[i-3])%mod;
AC代码:
#include <bits/stdc++.h>
const int maxx=100010;
const int inf=0x3f3f3f3f;
const int mod=998244353;
using namespace std;
long long ans[maxx];
int init()
{
ans[0]=0,ans[1]=ans[2]=ans[3]=1;
for(int i=4; i<maxx; i++)
{
ans[i]=((ans[i-1]+ans[i-3])%mod);
}
}
int main()
{
long long t,n,x,y;
scanf("%lld",&t);
init();
while(t--)
{
scanf("%lld%lld%lld",&n,&x,&y);
if(x==1 && y==n)
printf("%lld\n",ans[y-x+1]);
else if(x==1 || y==n)
printf("%lld\n",ans[y-x]);
else
printf("%lld\n",ans[y-x-1]);
}
return 0;
}