题意很明确,不说了。

前置芝士:单位根反演

也就是:

\[[n|a]=\frac 1 n \sum_{i=0}^{n-1}w_n^{ai}
\]

看到题目给的柿子:

\[\sum_{i=0}^n\binom n i \times p^i \times \lfloor \frac i k \rfloor
\]

先把那个向下取整拆开:

\[\sum_{i=0}^n\binom n i \times p^i \times \frac {i- i \bmod k} k
\]
\[\frac 1 k \times (\sum_{i=0}^n\binom n i \times p^i \times i - \sum_{i=0}^n\binom n i \times p^i \times i \bmod k)
\]

先看左边的:

\[\sum_{i=0}^n \binom n i\times p^i \times i
\]

由于 \(i\) 这里很难使用二项式定理,又不能爆算,所以考虑通过某种方式把 \(i\) 搞掉,给出引理:

\[\binom n m m = \binom {n-1} {m-1} n
\]

证明是:

\[\binom n m = \frac {n!} {(n-m)!m!}m = \frac {(n-1)!} {(n-m)!(m-1)!}n = \binom {n-1} {m-1}n
\]

于是:

\[np\sum_{i=0}^n\binom {n-1} {i-1} p^i
\]

然后使用二项式定理:

\[np(p+1)^{n+1}
\]

现在看向右边:

\[\sum_{i=0}^n\binom n i \times p^i \times i \bmod k
\]

按照做莫反题的经验,枚举余数:

\[\sum_{i=0}^n\binom n i p^i\sum_{t=0}^{k-1}t[i-t \bmod k =0]
\]

单位根反演一下:

\[\frac 1 k\sum_{i=0}^n\binom n i p^i\sum_{t=0}^{k-1}t\sum_{j=0}^{k-1}w_k^{(i-t)j}
\]
\[\frac 1 k\sum_{i=0}^n\binom n i p^i\sum_{t=0}^{k-1}t\sum_{j=0}^{k-1}w_k^{ij}w_k^{-tj}
\]
\[\frac 1 k\sum_{j=0}^{k-1}\sum_{t=0}^{k-1}tw_k^{-tj}\sum_{i=0}^n\binom n i p^iw_k^{ij}
\]
\[\frac 1 k\sum_{j=0}^{k-1}(pw_k^j+1)^n\sum_{t=0}^{k-1}tw_k^{-tj}
\]

于是我们考虑怎么快速计算 \(\sum_{i=0}^{n-1}ik^i\)

这看上去很像等比数列,按照等比数列求和公式的推导对这玩意儿做一遍:

为了方便,先设这玩意儿为 \(f(n,k)\)

\[kf(n,k)-f(n,k)=\sum_{i=0}^{n-1}ik^{i+1}-\sum_{i=0}^{n-1}ik^i
\]
\[\sum_{i=1}^n(i-1)k^i-\sum_{i=0}^{n-1}ik^i
\]
\[(n-1)k^n-\sum_{i=1}^{n-1}k^i
\]
\[(n-1)k^n-\frac {k^n-k} {k-1}
\]

又因为带入的都是 \(k\) 次单位根,所以上式的 \(k^n=1\)。于是:

\[n-1+\frac {1-k}{k-1}=n
\]

所以 \(f(n,k) =\frac n {k-1}\),注意要特判 \(f(n,1) = \frac {n(n-1)} 2\)

整理一下:

\[\frac 1 k \times ( np(p+1)^{n+1} - \frac 1 k\sum_{j=0}^{k-1}(pw_k^j+1)^nf(k,w_k^{-j}) )
\]

贴代码:

#include<cstdio>
const int M=1<<23|5,mod=998244353;
int n,p,k,ans,w[M];
inline int pow(int a,int b=mod-2){
int ans=1;
for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)ans=1ll*ans*a%mod;
return ans;
}
inline int Add(const int&a,const int&b){
return a+b>=mod?a+b-mod:a+b;
}
inline int f(const int&n,const int&k){
if(k==1)return (1ll*n*(n-1)>>1)%mod;
return 1ll*n*pow(k-1)%mod;
}
signed main(){
int i;
scanf("%d%d%d",&n,&p,&k);
w[0]=1;w[1]=pow(3,(mod-1)/k);
for(i=2;i<=k;++i)w[i]=1ll*w[i-1]*w[1]%mod;
for(i=0;i<k;++i)ans=Add(ans,1ll*pow((1ll*p*w[i]+1)%mod,n)*f(k,w[k-i])%mod);
ans=(1ll*n*p%mod*pow(p+1,n-1)%mod-1ll*ans*pow(k)%mod+mod)%mod;
printf("%d",1ll*ans*pow(k)%mod);
}

LGP5591题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 简单的MAC的终端命令

    今天小研究了一下MAC的终端命令,主要为了方便调试程序用,XCODE用不来啊... 在这里记下..防止丢失 pwd 当前工作目录 cd(不加参数) 进root cd(folder) 进入文件夹 cd ...

  2. WJMZBMR(陈立杰)在成都赛区开幕式上的讲话

    2013年10月19日 18:05:44 各位选手,各位教练,大家好,我是来自清华大学交叉信息学院的陈立杰,今天很荣幸站在这里代表全体参赛选手发言.对于我来说,这是我第一次正式参加ACM的比赛.不过我 ...

  3. Ansible之roles模块--lnmp分布式部署

    Ansible之roles模块--lnmp分布式部署 目录 Ansible之roles模块--lnmp分布式部署 1. role模块的作用 2. roles的目录结构 3. roles内个目录含义解释 ...

  4. shell——mkfifo管道

    转自:http://blog.sina.com.cn/s/blog_605f5b4f0101azuc.html 创建命名管道的方法为:mkfifo pipe_name. 这样就能创建一个命名的管道pi ...

  5. Pandas中Series与Dataframe的初始化

    (一)Series初始化 1.通过列表,index自动生成 se = pd.Series(['Tom', 'Nancy', 'Jack', 'Tony']) print(se) 2.通过列表,指定in ...

  6. SYSTEM表空间满,解决方法

    SYSTEM表空间是Oracle创建数据库时候自动创建的,每个Oracle数据库都会有SYSTEM表空间,而且SYSTEM表空间总是要保持在联机模式下,因为其包含了数据库运行所要求的基本信息,如:数据 ...

  7. C++的Copy Elision导致的奇怪问题

    最近写设计模式作业的时候, 有一个作业是实现装饰器模式 (Decorator Pattern), 由于我不会 Java, 所以只能用 C++ 来实现 在这个背景下, 会有简单(表意)的几个类, 如下: ...

  8. 【摸鱼神器】UCode Cms管理系统 内置超好用的代码生成器 解决多表连接痛点

    一.序言 UCode Cms管理系统是面向企业级应用软件开发的脚手架.当前版本1.3.4.快速体验: git clone https://gitee.com/decsa/demo-cms.git (一 ...

  9. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用

    在C#中实现的基于外观或门面模式打造的业务应用案例 以前一直没有想过写一些东西来把项目中用到的知识点及技术实现做一个归纳整理并分享出来.现在打算逐渐的把项目中的一些东西整理并分享出来,与大家共勉! 外 ...

  10. Vue3学习(十五)之 级联选择组件Cascader的使用

    写在前面 好像又过去了一周,依旧是什么也没产出,不是懒,而是心情不好,什么也不想干,失眠是常事. 应该是从今年开始,突然感觉博客园就像是我自己的日记一样,承载着自己的喜怒哀乐和酸甜苦辣咸,当然,尴尬的 ...