CF1251F-Red-White Fence【NTT】

前言

刚开始看错题推了半天的生成函数
在这里插入图片描述


正题

题目链接:https://www.luogu.com.cn/problem/CF1251F


题目大意

nnn个白色木板,kkk个红色木板,给出这些木板的高度,木板排成一排形成栅栏。栅栏要求只有一个红色木板且在红色木板左边单调升,右边单调降。

mmm次询问能够围成周长为qiq_iqi有多少种围法。


解题思路

首先如果栅栏多余两个可以看做是两个,因为同一个高度的栅栏最多只能出现两次,而木板相同。

因为kkk很小显然是要我们处理kkk次,现在分开考虑出现两次的和出现一次的方案。若出现一次的栅栏有xxx个,拿出kkk围个的方案数就是(xk)∗2k\binom{x}{k}*2^k(kx)2k,若出现两次的栅栏有yyy个,拿出kkk个围的方案数就是(k2x)\binom{k}{2x}(2xk)

然后两种方案卷起来就可以计算答案了。

时间复杂度O(k(nlog⁡n+m))O(\ k(n\log n+m)\ )O( k(nlogn+m) )


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=(12*1e5)+10,P=998244353;
struct poly{ll a[N],n;
}F,G;
ll n,m,t,f1,f2,r[N],a[N],v[N],b[N],f[N],pw[N],fac[N],inv[N],q[N],ans[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void NTT(ll *f,ll n,ll op){for(ll i=0;i<n;i++)if(r[i]<i)swap(f[r[i]],f[i]);for(ll p=2;p<=n;p<<=1){ll len=p>>1;ll tmp=power(3,(P-1)/p);if(op==-1)tmp=power(tmp,P-2);for(ll k=0;k<n;k+=p){ll buf=1;for(ll i=k;i<k+len;i++){ll tt=f[i+len]*buf%P;f[i+len]=(f[i]-tt+P)%P;f[i]=(f[i]+tt)%P;buf=buf*tmp%P;}}}if(op==-1){ll invn=power(n,P-2);for(ll i=0;i<n;i++)f[i]=f[i]*invn%P;}return;
}
void mul(poly &a,poly &b){ll n=1;while(n<=a.n+b.n)n<<=1;for(ll i=0;i<n;i++)r[i]=(r[i>>1]>>1)^((i&1)?(n>>1):0);NTT(a.a,n,1);NTT(b.a,n,1);for(ll i=0;i<n;i++)a.a[i]=a.a[i]*b.a[i]%P;NTT(a.a,n,-1);return;
}
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
int main()
{scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);fac[0]=pw[0]=inv[0]=1;for(ll i=1;i<=4*n;i++)fac[i]=fac[i-1]*i%P,pw[i]=pw[i-1]*2%P;inv[4*n]=power(fac[4*n],P-2);for(ll i=4*n;i>1;i--)inv[i-1]=inv[i]*i%P;for(ll i=1;i<=m;i++)scanf("%lld",&b[i]);sort(b+1,b+1+m);scanf("%lld",&t);for(ll i=1;i<=t;i++)scanf("%lld",&q[i]);sort(a+1,a+1+n);ll l=1;for(ll k=1;k<=m;k++){while(l<=n&&a[l]<b[k]){if(!v[a[l]])f1++;else if(v[a[l]]==1)f1--,f2++;v[a[l]]++;l++;}memset(G.a,0,sizeof(G.a));memset(F.a,0,sizeof(F.a));for(ll i=0;i<=f1;i++)G.a[i]=pw[i]*C(f1,i)%P;G.n=f1+1;for(ll i=0;i<=2*f2;i++)F.a[i]=C(2*f2,i);F.n=2*f2+1;mul(G,F);for(ll i=1;i<=t;i++)if(q[i]>=b[k]*2+2)ans[i]=(ans[i]+G.a[q[i]/2-b[k]-1])%P;}for(ll i=1;i<=t;i++)printf("%lld\n",ans[i]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图论复习——dfs树,点双,边双,强连通分量

知识点 dfs树 对一个图运行 dfs 算法&#xff0c;每个点uuu的父亲定义为第一次遍历uuu时的前驱结点&#xff0c;若无则为根。 无向图的 dfs树 没有横叉边。 有向图的 dfs树 横叉边方向唯一&#xff0c;总是从后访问的点指向先访问的点。 dfs树详解 tarjan 点双 定义&#…

【点分治】Tree(luogu 4178/金牌导航 点分治-1)

Tree luogu 4178 金牌导航 点分治-1 题目大意 给出一棵树&#xff0c;问你书中路径长度小于等于k的点对个数有多少个 输入样例 5 1 2 3 1 3 1 1 4 2 3 5 1 4输出样例 8数据范围 1⩽N⩽41041\leqslant N \leqslant 4\times 10^41⩽N⩽4104 解题思路 对于该树&#xff0…

均分纸牌问题

均分纸牌有三种情况&#xff1a;线性&#xff0c;环形&#xff0c;二维 文章目录线性题目描述思路&#xff1a;代码&#xff1a;环形题目描述思路代码线性 题目描述 P1031 均分纸牌 有N堆纸牌&#xff0c;编号分别为1,2,…,N。每堆上有若干张&#xff0c;但纸牌总数必为N的倍…

.net core实践系列之短信服务-Api的SDK的实现与测试

前言上一篇《.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现》讲解了API的设计与实现&#xff0c;本篇主要讲解编写接口的SDK编写还有API的测试。或许有些人会认为&#xff0c;SDK的编写可以不需要&#xff0c;既然已经用了RESTful web服务与Swagger提供的接口描述&…

[集训队作业2018] count(笛卡尔树,生成函数,卡特兰数)

传送门 什么情况下两序列同构 对于两序列A[1,n],B[1,n]A[1,n],B[1,n]A[1,n],B[1,n]&#xff0c;设fA(1,n)pa,fB(1,n)pbf_A(1,n)p_a,f_B(1,n)p_bfA​(1,n)pa​,fB​(1,n)pb​&#xff0c; 若pa̸pbp_a\notp_bpa​​pb​&#xff0c;A,BA,BA,B一定不同构。若papbp_ap_bpa​p…

P4016 负载平衡问题

文章目录题目描述题解&#xff1a;方法一&#xff1a;代码&#xff1a;方法二&#xff1a;P4016 负载平衡问题题目描述 G 公司有 n 个沿铁路运输线环形排列的仓库&#xff0c;每个仓库存储的货物数量不等。如何用最少搬运量可以使 n 个仓库的库存数量相同。搬运货物时&#xff…

Ocelot简易教程(二)之快速开始2

为什么这篇的标题叫“Ocelot简易教程&#xff08;二&#xff09;之快速开始2”呢&#xff0c;因为很多朋友跟我说上一篇“ Ocelot简易教程&#xff08;二&#xff09;之快速开始1”内容太少了&#xff0c;只是简单介绍Ocelot的一些简单配置&#xff0c;让Ocelot能跑起来&#x…

.NET的前世今生与将来

笔者注谨以此文纪念我敬重的2016年9月17日去世的 装配脑袋 逝世两周年让大家久等了&#xff0c;前后花了1年的时间&#xff0c;几经改版&#xff0c;终于完成撰写了一万字长文&#xff0c;回顾和展望.NET这16年来的成功与失败。最终能成文是因为我给自己承诺必须赶在 装配脑袋 …

P4011 孤岛营救问题

P4011 孤岛营救问题 文章目录输入输出样例题意&#xff1a;题解&#xff1a;代码&#xff1a;输入输出样例 输入 4 4 9 9 1 2 1 3 2 1 2 2 2 0 2 1 2 2 0 2 1 3 1 0 2 3 3 3 0 2 4 3 4 1 3 2 3 3 0 3 3 4 3 0 4 3 4 4 0 2 2 1 2 4 2 1输出 14题意&#xff1a; (原题太长我就…

[NOI2014] 起床困难综合症(二进制,贪心)

#include<bits/stdc.h> int n,m,ans,x,a10,a2-1; //-1的补码:11111111111... char str[5]; int main(){scanf("%d%d",&n,&m);while(n--){scanf("%s%d",str,&x);if(str[0]A) a1&x, a2&x;if(str[0]X) a1^x, a2^x;if(str[0]O) a1|…

P4015 运输问题

P4015 运输问题 文章目录题目描述&#xff1a;输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a;题解&#xff1a;代码&#xff1a;题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 两行分别输出最小运输费用和最大运输费用。 输入输出样例…

NetCore使用Jwtbearer给WebAPI添加访问控制

现在JWT代替session来做访问控制已经成为大部分webapi的做法&#xff0c;今天我们也来尝试一下WebAPI使用NetCore2.1创建,无身份认证信息nuget安装包IdentityModel 选择稳定版3.9.0Microsoft.AspNetCore.Authorization 版本2.1.1Microsoft.AspNetCore.Authentication.JwtBearer…

图论复习——网络流

最大流 与 最小费用最大流 Blog 有上下界网络流 Blog 最小割 Blog 模拟费用流 CF724E Goods transportation 摘自此Blog 建图优化 若同一行或者同一列的点互相可达&#xff0c;那么其实不需要两两连边&#xff0c;只需要对于每行和每列建一个辅助节点作为中转 [ARC…

离散大创项目——图片识别笔记

1.我才知道ainput()读入的竟然是字符串。。。还要强制转化成int型&#xff0c;这玩意搞了我好久 2.对照片进行裁剪&#xff0c;将照片周围多余的白色部分去除&#xff08;也就是让图像尽可能撑满整个框&#xff09; 由上一张裁成下一张 from PIL import Image import os SCA…

最小割小记

参考博客&#xff1a;最小割浅谈 关于最小割 常用描述 表述一&#xff1a;删去若干条边使得源点到汇点不连通&#xff0c;求删边的权值和的最小可能值。 表述二&#xff1a;将点集分为(S,T)(S,T)(S,T)&#xff0c;记所有从SSS中出发到TTT中的边的权值和为c(S,T)c(S,T)c(S,T)&a…

斐波那契数列求法

文章目录求斐波那切数列的几个方法&#xff1a;经典做法&#xff1a;递推&#xff1a;动态规划矩阵快速幂原理&#xff1a;代码&#xff1a;例题&#xff1a;模拟过程求斐波那切数列的几个方法&#xff1a; 经典做法&#xff1a; 众所周知&#xff1a;斐波那契数列的定义是f(…

ASP.Net Core2.1中的HttpClientFactory系列一

引言&#xff1a;ASP.NET Core2.1 中出现了一个新的 HttpClientFactory 功能, 它有助于解决开发人员在使用 HttpClient 实例从其应用程序中访问外部 web 资源时可能遇到的一些常见问题。关于HttpClientFactory 到底解决了那些HttpClient的严重问题&#xff0c;下面是我罗列出来…

最大子矩阵(普通和01)

文章目录普通矩阵&#xff08;单个矩阵值为任何数&#xff09;最大子段和扩展到二维情况01矩阵&#xff08;单个矩阵值为0或1&#xff09;代码&#xff1a;普通矩阵&#xff08;单个矩阵值为任何数&#xff09; 例题&#xff1a;POJ 1074 求出其中最大的子矩阵 答案是&#x…

自动化流程开源框架BotSharp

BotSharp是一款为方便构建智能对话机器人平台而开发的开源框架&#xff0c;最大的特点是所有模型算法都是基于.NET Core开发实现&#xff0c;甚至最基本的Penn Treebank分词标准&#xff0c;都重新用C#实现了。在机器学习python占绝对优势的时代算是不可多得的项目。该项目涉及…

积极参与开源项目,促进.NET Core生态社区发展

今天早上在微信群里聊天聊到百度的SDK 已经支持.NET Core, 百度已经在3月份就支持了&#xff0c;想起当时还是我在他们的github上提的issue&#xff1a; https://github.com/Baidu-AIP/dotnet-sdk/issues/3。.NET Core生态社区的发展已经四年多时间&#xff0c;日趋完善&#x…