题面

我们需要知道这样一个东西(大概叫 斯特林公式?)

$S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^k C_j^k(j-k)^i$

那么就是推啊

$=\sum\limits_{i=0}^n\sum\limits_{j=0}^iS(i,j)*2^j*j!$

然后问题来了,因为后面还有$2^j$和$j!$,我们发现这里展开斯特林数也没用,所以我们要把它们甩出去

因为$j>i$时$S(i,j)==0$,所以让后面求和到$n$,然后前提$2^j$和$j!$

$=\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)*2^j*j!$

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^nS(i,j)$

展开斯特林数

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^k C_j^k(j-k)^i$

一般我们会把$C(j,k)$拆开来消掉前面的$\frac{i}{j!}$

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^k\frac{j!}{k!(j-k)!}(j-k)^i$

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\sum\limits_{k=0}^{j}(-1)^k\frac{1}{k!(j-k)!}(j-k)^i$

那后面这个东西明显的分成了两部分:和$k$有关的和和$j-k$有关的

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\sum\limits_{k=0}^{j}\frac{(-1)^k}{k!}\frac{(j-k)^i}{(j-k)!}$

使用高中老师教给我们的等比数列求和公式

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\sum\limits_{k=0}^{j}\frac{(-1)^k}{k!}\frac{(j-k)^{i+1}-1}{(j-k-1)(j-k)!}$

这样和是一定的,所以用NTT卷出来后面的然后前面的$O(n)$求和就可以了

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=100005,mod=998244353;
 6 int a[4*N],b[4*N],rev[4*N],fac[N],inv[N];
 7 int n,ni,G,Gi,pw,ans;
 8 void exGCD(int a,int b,int &x,int &y)
 9 {
10     if(!b) {x=1,y=0; return;}
11     exGCD(b,a%b,y,x),y-=a/b*x;
12 }
13 int Qpow(int x,int k)
14 {
15     if(!k) return 1;
16     if(k==1) return x;
17     int tmp=Qpow(x,k/2);
18     return k%2?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
19 }
20 int Inv(int x)
21 {
22     int xx,yy;
23     exGCD(x,mod,xx,yy);
24     return (xx%mod+mod)%mod;
25 }
26 void NTT(int *arr,int len,int typ)
27 {
28     for(int i=0;i<=len;i++)
29         if(rev[i]>i) swap(arr[rev[i]],arr[i]);
30     for(int i=2;i<=len;i<<=1)
31     {
32         int lth=i>>1,ort=Qpow(~typ?G:Gi,(mod-1)/i);
33         for(int j=0;j<len;j+=i)
34         {
35             int ori=1,tmp;
36             for(int k=j;k<j+lth;k++,ori=1ll*ori*ort%mod)
37             {
38                 tmp=1ll*ori*arr[k+lth]%mod;
39                 arr[k+lth]=(arr[k]-tmp+mod)%mod;
40                 arr[k]=(arr[k]+tmp)%mod;
41             }
42         }
43     }
44     if(typ==-1)
45     {
46         int ni=Inv(len);
47         for(int i=0;i<=len;i++)
48             arr[i]=1ll*arr[i]*ni%mod;
49     }
50 }
51 void Init()
52 {
53     scanf("%d",&n);
54     G=3,Gi=Inv(G),fac[0]=inv[0]=pw=1;
55     for(int i=1;i<=n;i++)
56         fac[i]=1ll*fac[i-1]*i%mod;
57     inv[n]=Inv(fac[n]);
58     for(int i=n-1;i;i--)
59         inv[i]=1ll*inv[i+1]*(i+1)%mod;
60     for(int i=0;i<=n;i++)
61         a[i]=(i%2)?mod-inv[i]:inv[i]; b[0]=1,b[1]=n+1;
62     for(int i=2;i<=n;i++)
63         b[i]=1ll*(Qpow(i,n+1)-1)*Inv(i-1)%mod*inv[i]%mod;
64 }
65 void Prework()
66 {
67     int len=1; while(len<=2*n+2) len<<=1;
68     for(int i=1;i<=len;i++)
69         rev[i]=(rev[i>>1]>>1)+(i&1)*(len>>1);
70     NTT(a,len,1),NTT(b,len,1);
71     for(int i=0;i<=len;i++) a[i]=1ll*a[i]*b[i]%mod;
72     NTT(a,len,-1);
73 }
74 int main()
75 {
76     Init(),Prework();
77     for(int i=0;i<=n;i++,pw=pw*2%mod)
78         ans+=1ll*pw*fac[i]%mod*a[i]%mod,ans%=mod;
79     printf("%d",ans);
80     return 0;
81 }

View Code

转载于:https://www.cnblogs.com/ydnhaha/p/10222245.html

解题:HEOI 2016 求和相关推荐

  1. 文巾解题 67. 二进制求和

    1 题目描述 2 解题思路 2.1 整数相加过渡 将A,B转化为整数(使用迭代实现),然后将A+B转换成二进制的字符串 返回的内容从第二个下标开始,是为了剔除bin()函数返回的'0b'这两个字符串 ...

  2. COGS 2274. [HEOI 2016] tree

    ★☆   输入文件:heoi2016_tree.in   输出文件:heoi2016_tree.out   简单对比 时间限制:1 s   内存限制:128 MB 这道题数据弱到炸了 . 第一次做用树 ...

  3. leetcode 目录

    动态规划 文巾解题 5. 最长回文子串_刘文巾的博客-CSDN博客 文巾解题 10. 正则表达式匹配_刘文巾的博客-CSDN博客 文巾解题 198. 打家劫舍_UQI-LIUWJ的博客-CSDN博客 ...

  4. 计算机二级考试题库office题型,全国计算机二级office考试题型分析

    计算机是人类大脑的延伸,可代替人脑的若干功能并加以强化.下面是小编整理的关于计算机二级office考试题型分析,欢迎大家参考! 全国计算机等级考试--二级Ms Office高级应用,要求在Window ...

  5. 解题报告(一)D、(CROC 2016 - Final Round C)Binary Table(矩阵 + 状态压缩 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  6. 2016百度之星 - 初赛(Astar Round2B)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 被自己蠢哭,去年还能进一下复赛,今年复赛都没戏了... 链接→2016"百度之星" - 初赛(Astar Round2B)  Prob ...

  7. 信息学奥赛一本通 2016:【例4.1】for循环求和

    [题目链接] ybt 2016:[例4.1]for循环求和 [题目考点] 1. for循环 2. 求和 设置表示加和变量的s,初值为0.int s = 0 每次循环,s增加一个要加的数字a的值.s + ...

  8. 信息学奥赛一本通(2016:【例4.1】for循环求和)

    2016:[例4.1]for循环求和 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 2689     通过数: 1944 [题目描述] 利用for循环.计算输出1 ...

  9. 中考表格计算机函数求和方法,2016信息技术中考电子表格处理模块

    <2016信息技术中考电子表格处理模块>由会员分享,可在线阅读,更多相关<2016信息技术中考电子表格处理模块(12页珍藏版)>请在人人文库网上搜索. 1.电子表格处理模块试题 ...

最新文章

  1. 微软CRM 2011 新功能之三:可新增客户化活动类型实体
  2. 泡椒java_吃货联盟 源代码 Java初级小项目
  3. mfc ado 链接mysql 数据_MFC用ado方法和数据库连接后,怎么取得数据?(高加分)...
  4. Nutch2.4 存储方式配置
  5. JavaScript强化教程—— RegExp 对象
  6. 怎么改字段名称_精装房这么改!换门框,封阳台,效果出来比毛坯房还好
  7. 【温故而知新】HTTP 报文
  8. 第一个冲刺周期(第四天)
  9. 一旦有辞职念头就干不长了吗_如何理性而高效地辞职?
  10. Mac 配置jupyter notebook 扩展 Nbextensions
  11. (零)ubuntu下制作最小deb包
  12. java开发_mysql中获取数据库表描述_源码下载
  13. python列表综合练习
  14. 参数等效模型可以用于_华北电力大学 陈宁、齐磊 等:适用于柔性直流电网操作过电压分析的混合式高压直流断路器端口等效模型...
  15. 噪声dba是什么单位_请问:dBA是什么意思?和dB,dBm之类有什么关系?主要用... - 射频微波研发讨论区 - 52RD研发论坛...
  16. 【Python 实战基础】Pandas如何统筛选复制某个数据
  17. 伤心----------绝望
  18. 如何能在面试的头5分钟内让HR喜欢你
  19. xp系统修复 sfc /scannow 免光盘技巧
  20. android fagment 重叠问题

热门文章

  1. Java 8特性有望进入.Net/Mono
  2. 总结C#中窗体间传递数据的几种方法
  3. Python行业晋升路线如何规划
  4. ARM嵌入式开发之JTAG与SWD接口
  5. RS232详解(续)
  6. 用位运算实现加减乘除
  7. java contains_Java基础教程|生成不重复随机数 java
  8. Java的四种引用,强弱软虚,用到的场景
  9. php base64_decode 图片,PHP保存Base64图片base64_decode的问题整理
  10. 性能优化之数据库优化