玲珑杯 1160 - 康娜与玲珑杯
题意,在n本书中要拿k本书的倍数的方案,每本书都不同,一本都不拿也算一种方案
1≤k≤3e4或者1≤k≤3e5并且为2的次幂。1≤n≤10181≤k≤3e4或者1≤k≤3e5并且为2的次幂。 1≤n≤10^18
开始以为是直接求C(n,0)+C(n,k)+C(n,2k)…
求不出来 orz
看了题解后 问了yql大佬
先是可以得到一个递推式
F[i][j]:表示前i本书,拿j本的方案
F[i][j]=F[i-1][j]+F[i-1][j-1]
因为j比较大,我们可以用滚动数组,j=j% k
然后可以得到
答案就是f[n][0],我们只用求第一行就行了。
设,A为图中第一个矩阵,A矩阵是k*k,如果朴素求第一行的话,时间复杂度为k*k*logn,超时gg… 然后我们发现这个可以用NTT来加速
注意到A是循环矩阵
(什么是循环矩阵?类似于 a1a3a2a2a1a3a3a2a1 \begin{matrix}a1& a2 & a3 \\a3& a1 & a2 \\a2& a3 & a1 \\\end{matrix} 的矩阵)
如果A= a1a3a2a2a1a3a3a2a1 \begin{matrix}a1& a2 & a3 \\a3& a1 & a2 \\a2& a3 & a1 \\\end{matrix}
则A*A的第一行为(a1*a1+a2*a3+a3*a2 , a1*a2+a2*a1+a3*a3, a1*a3+a2*a2+a3*a1)
这个就是f(x)=a1+(a2)x+(a3)x2f(x)=a1+(a2)x+(a3)x^2的卷积模3为0,1,2的值
卷积就可以用NTT了~用NTT的总时间复杂度为O(k*logn*logk),当k为3e4时,为1e7,但k为3e5时就会超时。因为当k>3e4时,k只能为2的幂。一般去长度为k的循环卷积,肯定做的是>2k的FFT,来保证不会出错,但是如果k是2的次幂,就可以直接做长度为k的FFT,就可以直接变成点值之后快速幂。(yql教的:>)当k为2的幂次,时间大概是O(k*logn)
<从这个题中学到了很多,感谢yql~>
<基本上是yql的代码….>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>using namespace std;
const int maxn = 600005;
#define mod 998244353
#define ll long long
int A[maxn],B[maxn],Ans[maxn],X[maxn];
ll n;int k;
int gg=3;int fexp(int x,int p){int ans=1;for(;p;p>>=1,x=1LL*x*x%mod)if(p&1)ans=1LL*ans*x%mod;return ans;}void NTT(int *a,int f,int k){for(int i=0,j=0;i<k;i++){if(i>j)swap(a[i],a[j]);for(int l=k>>1;(j^=l)<l;l>>=1);}for(int i=1;i<k;i<<=1){int w=fexp(gg,(f*(mod-1)/(i<<1)+mod-1)%(mod-1));for(int j=0;j<k;j+=i<<1){int e=1;for(int k=0;k<i;k++,e=1LL*e*w%mod){int x,y;x=a[j+k];y=1LL*a[j+k+i]*e%mod;a[j+k]=(x+y)%mod;a[j+k+i]=(x-y+mod)%mod;}}}if(f==-1){int _inv=fexp(k,mod-2);for(int i=0;i<k;i++)a[i]=1LL*a[i]*_inv%mod;}
}
void Work(){if((k&(-k))==k){NTT(X,1,k);NTT(Ans,1,k);for(;n;n>>=1){if(n&1) for(int i=0;i<k;i++) Ans[i]=1LL*Ans[i]*X[i]%mod;for(int i=0;i<k;i++) X[i]=1LL*X[i]*X[i]%mod;}NTT(Ans,-1,k);}else {int t;for(t=1;t<=(k*2);t<<=1);for(;n;n>>=1){if(n&1){for(int i=0;i<t;i++) A[i]=B[i]=0;for(int i=0;i<k;i++) A[i]=Ans[i],B[i]=X[i];NTT(A,1,t),NTT(B,1,t);for(int i=0;i<t;i++) A[i]=1LL*A[i]*B[i]%mod;NTT(A,-1,t);for(int i=0;i<t;i++) Ans[i]=0;for(int i=0;i<t;i++) Ans[i%k]=(Ans[i%k]+A[i])%mod;}for(int i=0;i<t;i++) A[i]=B[i]=0;for(int i=0;i<k;i++) A[i]=X[i];NTT(A,1,t);for(int i=0;i<t;i++) A[i]=1LL*A[i]*A[i]%mod;NTT(A,-1,t);for(int i=0;i<k;i++) X[i]=0;for(int i=0;i<t;i++) X[i%k]=(X[i%k]+A[i])%mod;}}printf("%d\n",Ans[0]);
}void init()
{Ans[0]=1;X[0]++,X[k-1]++;
}int main()
{scanf("%lld %d",&n,&k);init();Work();return 0;
}
玲珑杯 1160 - 康娜与玲珑杯相关推荐
- P3924 康娜的线段树(マジやばくね)(线段树、期望、前缀和)难度⭐⭐⭐★
P3924 康娜的线段树 我觉得挺难的,マ(ma)ジ(ji)や(ya)ば(ba)く(ku)ね(ne)(不得了了)知道康娜的应该都懂 题解 P3924 [康娜的线段树] #include<iost ...
- P3924 康娜的线段树
P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以 ...
- 洛谷 P3924 康娜的线段树
P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以 ...
- 【题解】康娜的线段树
题目 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以维护一段区间的信息,是非常厉害 ...
- 洛谷9月月赛 康娜的线段树
题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以维护一段区间的信息,是非常 ...
- 洛谷 P3924 康娜的线段树 解题报告
P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她\(OI\). 今天康娜学习了一种叫做线段树的神奇魔法,这种 ...
- P3924 康娜的线段树(线段树+期望)
题目 题目传送门\color{red} 题目传送门题目传送门 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段 ...
- Python语言实现龙女仆康娜酱字符飞出
巧的是,女主小林编程用的语言也是Python,人生苦短,我用Python,模拟了动画的开始动画,下面先演示一下效果动态图: 下面上源代码: import time import osdef get(s ...
- 玲珑杯 Round #20
1161 - 康娜的数学课 Time Limit:1s Memory Limit:256MByte Submissions:615Solved:221 DESCRIPTION 康娜上三年级了,老师要教 ...
最新文章
- 不用精子就能繁育后代,科学家只用1个卵细胞就培育出健康小鼠,来自上交医学院 | PNAS...
- ajax传递复杂参数
- python nameerror import_Python-ImportError:无法导入名称X
- 在lnmp1.3布置的web服务器上运行thinkphp3.2.3项目pathinfo路径模式
- 关于Xcode上的Other linker flags
- deepfake ai智能换脸_AI 换脸、声音篡改等,明确写入新版民法典!
- java基础之-I/O流和File类解析
- 基于JAVA+SpringMVC+Mybatis+MYSQL的个人记账管理系统
- scala类的序列化_Scala序列理解,通用类和内部类示例
- linux web目录写入权限命令,Linux下Web目录和文件安全权限设置
- 什么是驻点和拐点_拐点和驻点的区别有哪些
- java生成顺丰电子面单,顺丰拼多多电子面单设置教程
- python中 math.isfinite返回值为false_带有Python示例的math.isfinite()方法
- tkinter电子木鱼
- 个性篮球队名_你的篮球个性是什么
- 按照计算机名共享打印机,添加网络共享打印机
- Android消息传递机制总结
- 中国企业软件公司的转型之路
- 使用VS2012进行单元测试
- win10玩cf不能全屏_神奇的工作室ghost 不能启动
热门文章
- windows,cmd中进行盘符的切换
- tomcat启动报错javax.servlet.ServletException: It is not allowed to configure supportsCredentials=[true]
- 正则振型matlab,基于Matlab对结构自振周期和振型的求解
- 在NUC972上移植pjsip库并使用PJSUA测试VOIP电话(一)
- Jode java反编译 初识庐山真面目
- 变化检测综述 Deep learning for change detection in remote sensing images: comprehensive review and me
- mongodb数据存储大小
- 我的世界mod开发(3番外)自定义方块/物品模型
- 【渝粤教育】互联网营销概论
- 矩形脉冲信号合成_矩形脉冲信号的分解和合成