题目描述

  给你\(n,k\),求

\[\forall 0\leq t< k,s_t=\sum_{i=-t}^{n-t}[k|i]\binom{n}{i+t}
\]

  对\(998244353\)取模。

  \(k=2^m,m\leq 20,n\leq {10}^{{10}^6}\)

题解

\[\begin{align}
s_t&=\sum_{i=-t}^{n-t}[k|i]\binom{n}{i+t}\\
&=\sum_{i=-t}^{n-t}[i~\bmod k=0]\binom{n}{i+t}\\
&=\sum_{i=-t}^{n-t}\frac{1}{k}\sum_{j=0}^{k-1}{(w_k^i)}^j\binom{n}{i+t}\\
&=\frac{1}{k}\sum_{i=-t}^{n-t}\sum_{j=0}^{k-1}{(w_k^{-t})}^j{(w_k^{i+t})}^j\binom{n}{i+t}\\
&=\frac{1}{k}\sum_{j=0}^{k-1}{(w_k^{-t})}^j\sum_{i=-t}^{n-t}{(w_k^{i+t})}^j\binom{n}{i+t}\\
&=\frac{1}{k}\sum_{j=0}^{k-1}{(w_k^{-t})}^j\sum_{i=0}^{n}{(w_k^i)}^j\binom{n}{i}\\
&=\frac{1}{k}\sum_{j=0}^{k-1}{(w_k^{-t})}^j{(w_k^j+1)}^n\\
&=\frac{1}{k}\sum_{j=0}^{k-1}{(w_k^t)}^{-j}{(w_k^j+1)}^n\\
\end{align}
\]

\[s_i=\frac{1}{k}\sum_{j=0}^{k-1}{(w_k^i)}^{-j}{(w_k^j+1)}^n\\
\]

  然后就能发现这是一个IDFT的形式。

  直接IDFT就好了。

  时间复杂度:\(O(k\log k)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<utility>
#include<iostream>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
void open(const char *s)
{
#ifndef ONLINE_JUDGE
char str[100];
sprintf(str,"%s.in",s);
freopen(str,"r",stdin);
sprintf(str,"%s.out",s);
freopen(str,"w",stdout);
#endif
}
const ll p=998244353;
const ll p2=998244352;
const ll g=3;
ll fp(ll a,ll b)
{
ll s=1;
for(;b;b>>=1,a=a*a%p)
if(b&1)
s=s*a%p;
return s;
}
char s[1000010];
int a[2000010];
int rev[2000010];
void ntt(int *a,int n,int t)
{
for(int i=1;i<n;i++)
{
rev[i]=(rev[i>>1]>>1)|(i&1?n>>1:0);
if(i>rev[i])
swap(a[i],a[rev[i]]);
}
for(int i=2;i<=n;i<<=1)
{
int wn=fp(g,(p-1)/i);
if(t==-1)
wn=fp(wn,p-2);
for(int j=0;j<n;j+=i)
{
int w=1;
for(int k=j;k<j+i/2;k++)
{
int u=a[k];
int v=(ll)a[k+i/2]*w%p;
a[k]=(u+v)%p;
a[k+i/2]=(u-v)%p;
w=(ll)w*wn%p;
}
}
}
if(t==-1)
{
ll inv=fp(n,p-2);
for(int i=0;i<n;i++)
a[i]=a[i]*inv%p;
}
}
int main()
{
// freopen("e.in","r",stdin);
scanf("%s",s+1);
int n=0,k;
scanf("%d",&k);
int len=strlen(s+1);
for(int i=1;i<=len;i++)
n=((ll)n*10+s[i]-'0')%p2;
ll w=fp(g,(p-1)/k);
ll now=1;
for(int i=0;i<k;i++)
{
a[i]=fp(now+1,n)%p;
now=now*w%p;
}
ntt(a,k,-1);
ll ans=0;
for(int i=0;i<k;i++)
ans=(ans^((a[i]+p)%p));
printf("%lld\n",ans);
return 0;
}

白兔的刁难 IDFT的更多相关文章

  1. 牛客Wannafly挑战赛11E 白兔的刁难

    传送门 如果大力推单位根反演就可以获得一个 \(k^2logn\) 的好方法 \[ans_{t}=\frac{1}{k}\sum_{i=0}^{k-1}(w_k^{-t})^i(w_k^i+1)^n\ ...

  2. nowcoder73E 白兔的刁难 单位根反演+NTT

    感觉很套路? #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in" ...

  3. qsc oj 22 哗啦啦村的刁难(3)(随机数,神题)

    哗啦啦村的刁难(3) 发布时间: 2017年2月28日 20:00   最后更新: 2017年2月28日 20:01   时间限制: 1000ms   内存限制: 128M 描述 哗啦啦村作为喵哈哈村 ...

  4. Loj 3058. 「HNOI2019」白兔之舞

    Loj 3058. 「HNOI2019」白兔之舞 题目描述 有一张顶点数为 \((L+1)\times n\) 的有向图.这张图的每个顶点由一个二元组 \((u,v)\) 表示 \((0\le u\l ...

  5. Redis面试刁难大全

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MzQyMTYzOQ==&mid=2247483686&idx=1&sn=18dfa0fd08b ...

  6. 基2时域抽取FFT、IFFT的C++实现代码,另附DFT与IDFT的原始实现--转1

    介绍网络上的原理介绍非常丰富,具体请自行搜索网络资源. 本算法依靠FFT流图进行布置. 算法 ##进行完所有的原理推导后,我们可以得到如下的16点FFT流图: 通过上图可以看出整个流图输入序列的顺序已 ...

  7. HNOI2019 白兔之舞 dance

    HNOI2019 白兔之舞 dance 显然\(n=3\)就是\(n=1\)的扩展版本,先来看看\(n=1\)怎么做. 令\(W=w[1][1]\),显然答案是:\(ans_t=\sum_{i\mod ...

  8. 「loj3058」「hnoi2019」白兔之舞

    题意 有一个\((L+1)*n\) 的网格图,初始时白兔在\((0,X)\) , 每次可以向横坐标递增,纵坐标随意的位置移动,两个位置之间的路径条数只取决于纵坐标,用\(w(i,j)\) 表示,如果要 ...

  9. 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 1.cv2.dft(进行傅里叶变化) 2.np.fft.fftshift(将低频移动到图像的中心) 3.cv2.magnitude(计算矩阵的加和平方根) 4.np.fft.ifftshift(将低频和高频移动到原来位置) 5.cv2.idft(傅里叶逆变换)

    1. cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化 参数说明: img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法 ...

随机推荐

  1. [Linux]Debian 9重启DNS重置问题

    先编辑/etc/resolv.conf, 添加一个DNS, 比如114.114.114.114 然后sudo apt-get install resolvconf 然后编辑/etc/resolvcon ...

  2. 关于 pip安装的可能错误的排除

    今天安装selenium总是报错(下为错误信息) C:\Python27\Scripts>pip install seleniumCollecting seleniumC:\Python27\l ...

  3. Booth乘法

    先看一个例子,结合疑问看算法. 1.已知X=+0.0011 Y=-0.1011 求[XY]补 解:[x]补 =0.0011 , [-x]补 =1.1101,[y]补 =1.0101 部分积      ...

  4. Squid配置之使用帐号密码验证

      转自: https://blog.csdn.net/atco/article/details/43448885   1.安装squid使用root用户进行操作.先使用rpm检测是否已经安装了sql ...

  5. connect、resource和dba三种标准角色

    授权语句:grant connect,resource,dba to zwserver 经过授权以后,用户拥有connect.resource和dba三个角色的权限: (1)Connect 角色,是授 ...

  6. HTML4到HTML5

    第一步: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0.1//EN" "http://www.w3.org/TR/html ...

  7. js删除数组元素

    一.清空数组 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即被清空了 二.删 ...

  8. python之路--内置模块02

    一. namedtuple 命名元组->类似创建了一个类 from collections import namedtuple # 类 p = namedtuple("Point&qu ...

  9. 在编写wpf界面时候中出现如下错误: 类型引用不明确。至少有两个名称空间(“System.Windows”和“System.Windows”)中已出现名为“VisualStateManager”的类型。请考虑调整程序集 XmlnsDefinition 特性。

    wpf中类型引用不明确.至少有两个名称空间(“System.Windows”和“System.Windows”)中已出现名为“VisualState 你是不是用了WPFToolKit?如果是的,那原因 ...

  10. 死锁问题分析(个人认为重点讲到了gap间隙锁,解决了我一些不明报死锁的问题)

    线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ...