递推/思维 (2019杭电多校第五场HDU-6630 permutation 2)
2019-08-05 17:55
381 查看
题目链接
可以假定:1,x, y, N,在一个数轴上。这是问题转化为:
从x开始,每次可以向左(右)走1(2)步,最后1~N每点都走且只走一遍最后到达y的方法数。
我们注意到,对于一个长度大于2区间,我们最多途径两遍(一个来回)所以,行走方法只有一种
x–>1
1–>N(不经过x,y)
N–>y
另外,显然从x–>1,和从1–>x+1的过程只有一个可能。y-1 --> N, N–>y同理。
所以最终可能数是从x+1 到 y-1的可能数。(当x!=1 && y != N时)
推出间隔公式:
f[x] = f[x-1] + f[x-3]
另外,如果x== 1 || y== N,我们只要从x出发或到y结束即可。
下面是ac代码:
#include <iostream> #include <cstring> #define ll long long using namespace std; const int N = 1e6+6; const ll mod = 998244353; typedef unsigned long long ull; ll f[N]; int main() { f[0] = 1; f[1] = f[2] = 1; for (int i = 3; i <= 1000005; i++) f[i] = (f[i-1] + f[i-3]) % mod; int t; cin >> t; while(t--) { int a, b; int n; scanf("%d%d%d", &n, &a, &b); if (a != 1) a++; if (b != n) b--; printf("%lld\n", f[b - a]); } return 0; }
相关文章推荐
- 2019牛客暑假多校训练赛第五场I题 three points 1 (思维)
- HDU 5752 Sqrt Bo (思维题) 2016杭电多校联合第三场
- 杭电 hdu 5616 Jam's balance【思维】【暴力枚举】
- HDU - 6235 Permutation (2017CCPC哈尔滨 思维)
- HDU 4937 (杭电多校 #7 1003题)Lucky Number(瞎搞)
- hdu 4649 Professor Tian 多校第五场
- 2013 多校第五场 hdu 4649 Professor Tian
- 杭电 HDU 5596 (详解)GTW likes gt(思维)
- Hdu 5347 MZL's chemistry 2015ACM多校对抗赛第五场
- (2017多校训练第二场)HDU - 6052 To my boyfriend 思维题
- hdu 4686 Arc of Dream 杭电多校第九场1001 矩阵
- 2019牛客暑期多校训练营(第五场)G(DP)
- 2019hdu暑假多校训练赛第五场1004 equation hdu 6627(数学思维)
- 2017杭电多校第五场 1008 Rikka with Subset(动规)HDU 6092
- HDU 4649 多校第五场1007
- 2017 杭电多校联赛第二场 1001 Is Derek lying? HDU 6045
- hdu 4911 Inversion 多校第五场 求逆序数
- HDU 5351 MZL's Border(2015多校第五场第9题) 写长串找规律
- 2019hdu暑假多校训练赛第五场1005 permutation 1 hdu 6628(全排列)
- 2013 多校第五场 hdu 4651 Partition