[HDU 6330]2019 HDU多校test5 permutation 2

2023-05-16

permutation 2

题目链接
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. p 1 = x 1.p_1=x 1.p1=x
2. P N = y 2.P_N=y 2.PN=y
3. f o r   a l l   1 ≤ i &lt; N , ∣ p i − p i + 1 ∣ ≤ 2 3. for\ all\ 1≤i&lt;N, |pi−pi+1|≤2 3.for all 1i<N,pipi+12

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.

题目分析
先假设是从1跳到N,第N-1个位置可能是N-1或者N-2,当是N-1时,相当于从1跳到N-1.
N-1位置上是N-2时,N-2上必须是N-1不然N-1就跳不到了,那么N-3位置上也必须放N-3,因此就相当与从1跳到N-3
综上我们可以列出递推关系 f [ n ] = f [ n − 1 ] + f [ n − 3 ] f[n]=f[n-1]+f[n-3] f[n]=f[n1]+f[n3]
现在考虑从x到y
可以发现必须要先 从x到1再回来,从y到n再回来,
稍微试一下可以发现x走到1再走到x+1这总走法是唯一的
从y到n到y+1也是唯一的
那么就相当于从1走到(y-x+1)了

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<list>
#include<map>
#include<set>
#define MAX_V 1002
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const double PI=acos(-1);
const double eps=1e-8;
const int INF=0x3f3f3f3f;
const ll mod=998244353;
const int maxn=1e5+5;
ll f[maxn];
int main(){
    int t;
    scanf("%d",&t);
    f[1]=f[2]=f[3]=1;
    for(int i=4;i<maxn;i++)    f[i]=(f[i-1]+f[i-3])%mod;
    while(t--){
        int n,x,y;
        scanf("%d%d%d",&n,&x,&y);
        if(x!=1)    x++;
        if(y!=n)    y--;
        printf("%lld\n",f[y-x+1]);
    }
    return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[HDU 6330]2019 HDU多校test5 permutation 2 的相关文章

  • R- 找到值的唯一排列

    我希望创建包含两个不同值的向量的所有可能排列 其中我控制每个值的比例 例如 如果我有一个长度为 3 的向量 并且我想要包含单个 1 的所有可能组合 则我所需的输出是一个如下所示的列表 list 1 lt list c 1 0 0 c 0 1
  • Java全对算法

    给定一个整数集合 有什么 Java 算法可以给出所有的项对 如下所示 给定示例集合 1 3 5 我们想要输出 1 1 3 3 5 5 1 3 1 5 3 5 请注意 顺序并不重要 因此我们需要 1 3 3 1 之一 但不能同时两者 这应该适
  • 列表的有序排列

    给定一个有序的整数列表 L 1 2 3 4 和 k 的排列大小 我需要生成长度为 k 且第一个序列 L 0 的所有 有序 排列 对于上面的示例 这应该会产生以下结果 k 1 1 k 2 1 2 1 3 1 4 k 3 1 2 3 1 2 4
  • Python 中的重复排列

    我想迭代一个的所有顶点n尺寸为 1 的维度立方体 我知道我可以做到这一点itertools product如下 gt gt gt n 3 gt gt gt for j in it product 0 1 repeat n print j 0
  • 具有任意初始状态的 Steinhaus–Johnson–Trotter 算法

    如果初始数组中的值未排序 则标准 Steinhaus Johnson Trotter 中必须更改哪些内容 例如 我的初始数组是 312 我想生成以下结果 312 321 231 213 123 132 我可以引入一个额外的数组来定义每个数字
  • 部分排列

    我有以下递归函数用于输出部分组合 void comb string sofar string rest int n string substring if n 0 cout lt lt sofar lt lt endl else for s
  • SQL Server:无循环的排列/组合

    我有两个数据集 第一个是产品配方表以及构成该配方的产品 第二个数据集包含按产品分类的单独定价 我可以为单个产品设置多个价格 我想要实现的是输出一个结果集 其中包含每个产品配方的独特排列 只有所有组件在第二个数据集中都有定价的配方才应出现在输
  • 生成重复列表,无论顺序如何

    我想生成将列表中的索引与 槽 相关联的组合 例如 0 0 1 表示 0 和 1 属于同一个槽 而 2 属于另一个槽 0 1 1 1 表示 1 2 3 属于同一个槽 而 0 则单独存在 在这个例子中 0和1只是识别这些槽的方式 但不携带供我使
  • java中数组的所有可能的组合和子集

    给定一个可变维度的数组 例如 数组 1 2 4 5 我需要一种方法来概括数组的所有可能组合和子集 给定一个包含 n 个元素的数组 我需要拥有所有子集 1 个元素的所有子集 2 个元素的所有子集 n 个元素的所有子集 以及每个子集的所有可能排
  • 返回很大范围内的非重复随机值

    我想要一个函数 它可以从一组 n 个整数 0 到 n 1 中生成 k 个伪随机值 而不重复任何先前的结果 k小于或等于n O n 内存不可接受由于尺寸较大n以及我需要重新洗牌的频率 这些是我到目前为止考虑过的方法 Array 通常 如果我想
  • 如何在 PHP 中查找单词组合

    我有一个数组 new array array c a m t p 现在我想找到单词表中存在的单词组合 我曾尝试实现但没有成功 这是我的 php 代码 words array set powerSet new array 2 mysql ne
  • 如何从 Perl 正则表达式生成所有可能的排列?

    我知道你可以使用列表生成所有排列glob http perldoc perl org functions glob html or 算法 置换 http search cpan org dist Algorithm Permute例如 但如
  • 对(双精度)实数向量进行排序并获得它们

    在 C 中想要对很长的 2 20 实数向量 显然sort 就可以了 在我习惯了 R 的优点之前就已经使用过 Rorder 函数产生导致排序向量的排列 Example x 24 55 22 1 然后是排列 perm 3 2 0 1 贴出原图x
  • Makefile 排列

    Bash 可以产生排列 笛卡尔积 http wikipedia org wiki Cartesian product echo 1 2 a b 1a 1b 2a 2b 我想用 makefile 做类似的事情 这是一个例子 生成文件 all
  • 为什么这个算法的Big-O是N^2*log N

    将数组 a 从 a 0 填充到 a n 1 生成随机数 直到得到之前索引中不存在的数字 这是我的实现 public static int first int n int a new int n int count 0 while count
  • Python 字符串的所有可能组合

    你好 我正在使用 python 我正在尝试编写一个方法 其中给定一个字符串 它会找到该字符串的每个组合并将其附加到列表中 我将给出字符串并显示我想要的结果 string x god outcome lst g o d go gd og od
  • 红宝石来整理单词[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试编写一个 ruby 脚本来解读排列的单词 生成所有排列 并在 txt 目录中搜索该单词 我遇到了问题 这是我所拥有的简单概述 pr
  • 有人可以解释一下这段代码吗?排列代码[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在做一
  • 使用正整数参数优化

    我需要解决一个需要比较具有相同列数的两个矩阵的问题 其中之一被操纵 直到获得最佳匹配 我对两个矩阵之间的差异进行评分的方式非常复杂 我仍然需要最终确定它 目前我真正感兴趣的是找到一种仅适用于正整数的搜索 优化算法 我创建了一个简单的示例 其
  • 修改排列算法以防止重复打印输出的策略

    我一直在审查实践算法 目前正在研究一种我非常喜欢的排列算法 void permute char set int begin int end int range end begin if range 1 cout lt lt set lt l

随机推荐