题意:给定x,y,n,有标号从1到n的n个数组,求合法的排列个数模998244353使得

1:p[1]=x

2:p[n]=y

3:相邻两项的差的绝对值<=2

n<=1e5

思路:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
#define N 1100000
#define M 4100000
#define fi first
#define se second
#define MP make_pair
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1 const ll MOD=,inv2=(MOD+)/;
double eps=1e-;
int INF=1e9; int f[]; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} int main()
{
int cas=read();
f[]=f[]=f[]=;
rep(i,,) f[i]=(f[i-]+f[i-])%MOD;
while(cas--)
{
int n=read(),x=read(),y=read();
if(x>) x++;
if(y<n) y--;
printf("%d\n",f[y-x+]);
} return ;
}

最新文章

  1. 查看Linux内存状况的命令及工具
  2. 理解并自定义HttpHandler
  3. 中国版的 Office 365
  4. tyvj[1087]sumsets
  5. ubuntu mysql 更改IP导致mysql无法启动
  6. emacs+ensime+sbt打造spark源码阅读环境
  7. Shell case正则匹配法
  8. JSON数组分配输出每个li
  9. SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库)
  10. Oracle常用语句记录
  11. ios video标签部分mp4文件无法播放的问题
  12. APP安全--网络传输安全 AES/RSA/ECC/MD5/SHA
  13. div排版+文档流+定位秘诀
  14. 01_Linux软件源配置
  15. Emacs编辑器配置
  16. 码云IntelliJ IDEA
  17. 用户态使用 glibc/backtrace 追踪函数调用堆栈定位段错误【转】
  18. Python装饰器基础及运行时间
  19. Js高设笔记 &amp; 声明变量与初始化变量
  20. SpringBoot java.lang.IllegalArgumentException: Request header is too large

热门文章

  1. GIt 工作区与暂存区
  2. UIAutomation元素识别软件
  3. 5G调研与总结
  4. 剑指offer--day05
  5. oracle--角色权限
  6. Leveldb--Slice
  7. C#Exception 追踪异常位置
  8. sql 时间函数大全
  9. express快速入门
  10. Int、bigint、smallint、tinyint的区别