题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6630
题意:给你 ~ 数字组成的序列固定开头和结尾,并且相邻两个数字绝对值之差小于等于2,问方案数?
思路:打表发现 ~ 的方案为,那么其余情况也与 ~ 的方案有关,观察发现时方案为,其他为。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
const int mod = 998244353;
#define ll long long
ll f[N];
int n, x, y;
int main()
{
f[1] = 1; f[2] = 1;
for(int i = 3; i <= N; i++)
f[i] = (f[i-1] % mod + f[i-3] % mod) % mod;
int T; scanf("%d", &T);
while(T--)
{
scanf("%d%d%d",&n, &x, &y);
if(x == 1 && y == n) printf("%lld\n", f[y]);
else if(x == 1 || y == n) printf("%lld\n", f[y-x]);
else printf("%lld\n", f[y-x-1]);
}
}