题意:有一个数列$f$,对$\forall i\geq2,f_i=2f_{i-1}+3f_{i-2}$,给定$f_0,f_1$,再给定一个集合$S=\{a_{1\cdots n}\}$和$k$,求$\begin{align*}\sum\limits_{\substack{S'\subset S\\|S'|=k}}f\left(\sum\limits_{x\in S'}x\right)\end{align*}$

先看这个数列,它的特征方程为$\lambda^2-2\lambda-3=0$,两个特征根为$\lambda_1=-1,\lambda_2=3$,所以它的通项公式为$f_n=c_1(-1)^n+c_23^n$,由$\begin{cases}c_1+c_2=f_0\\-c_1+3c_2=f_1\end{cases}$我们得到$\begin{cases}c_1=\dfrac{3f_0-f_1}4\\c_2=\dfrac{f_0+f_1}4\end{cases}$

所以我们可以对题目给出的式子进行一番操作:

$\begin{align*}\sum\limits_{\substack{S'\subset S\\|S'|=k}}f\left(\sum\limits_{x\in S'}x\right)&=\sum\limits_{\substack{S'\subset S\\|S'|=k}}c_1(-1)^{\sum\limits_{x\in S'}x}+c_23^{\sum\limits_{x\in S'}x}\\&=c_1\sum\limits_{\substack{S'\subset S\\|S'|=k}}\prod\limits_{x\in S'}(-1)^x+c_2\sum\limits_{\substack{S'\subset S\\|S'|=k}}\prod\limits_{x\in S'}3^x\end{align*}$

这种先抽取定量元素再求乘积的方式很像多项式乘法,事实上,对上式的第一个sigma,它等于$\begin{align*}[x^k]\prod\limits_{i=1}^n\left((-1)^{a_i}x+1\right)\end{align*}$,第二个sigma同理

这个多项式的乘积直接用分治+FFT计算即可,总时间复杂度$O(k\log_2k\log_2n)$

模数比较鬼畜,要用FFT,太久没写我都不知道FFT怎么卡精度了==($n$单位根的$0\cdots n-1$次幂全部预处理出来)

#include<stdio.h>
#include<math.h>
#include<string.h>
typedef double du;
typedef long long ll;
const int mod=99991,inv4=24998;
int min(int a,int b){return a<b?a:b;}
int mul(int a,int b){return a*(ll)b%mod;}
template<class C>void swap(C&a,C&b){C c=a;a=b;b=c;
}
int pow(int a,int b){int s=1;while(b){if(b&1)s=mul(s,a);a=mul(a,a);b>>=1;}return s;
}
struct complex{du x,y;complex(du a=0,du b=0){x=a;y=b;}
};
complex operator+(complex a,complex b){return complex(a.x+b.x,a.y+b.y);}
complex operator-(complex a,complex b){return complex(a.x-b.x,a.y-b.y);}
complex operator*(complex a,complex b){return complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
int rev[262144],N,iN;
complex w[18][262144];
void pre(int n){int i,j,k;for(N=1,k=0;N<n;N<<=1)k++;for(i=0;i<N;i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<(k-1));k=0;for(i=1;i<=N;i<<=1){for(j=0;j<i;j++)w[k][j]=complex(cos(j*M_PI/du(i)),sin(j*M_PI/du(i)));k++;}
}
void fft(complex*a,int on){int i,j,k,c;complex t,wi;for(i=0;i<N;i++){if(i<rev[i])swap(a[i],a[rev[i]]);}c=0;for(i=2;i<=N;i<<=1){for(j=0;j<N;j+=i){for(k=0;k<i>>1;k++){wi=w[c][k];if(on==-1)wi.y=-wi.y;t=wi*a[i/2+j+k];a[i/2+j+k]=a[j+k]-t;a[j+k]=a[j+k]+t;}}c++;}if(on==-1){for(i=0;i<N;i++)a[i].x/=(du)N;}
}
complex ta[262144],tb[262144];
void mul(int*a,int*b,int*c,int n,int m){int i;pre(n+m+1);for(i=0;i<=n;i++)ta[i]=complex(a[i]);for(i=n+1;i<N;i++)ta[i]=complex();for(i=0;i<=m;i++)tb[i]=complex(b[i]);for(i=m+1;i<N;i++)tb[i]=complex();fft(ta,1);fft(tb,1);for(i=0;i<N;i++)ta[i]=ta[i]*tb[i];fft(ta,-1);for(i=0;i<=n+m;i++)c[i]=llround(ta[i].x)%mod;
}
int b[100010],k;
int*solve(int l,int r){int mid,*f;f=new int[r-l+2];memset(f,0,(r-l+2)<<2);if(l==r){f[0]=1;f[1]=b[l];}else{mid=(l+r)>>1;mul(solve(l,mid),solve(mid+1,r),f,min(mid-l+1,k),min(r-mid,k));}return f;
}
int a[100010];
int main(){int n,i,f0,f1,c1,c2,ans;scanf("%d%d",&n,&k);for(i=1;i<=n;i++)scanf("%d",a+i);scanf("%d%d",&f0,&f1);c1=mul(3*f0-f1,inv4);c2=mul(f0+f1,inv4);ans=0;for(i=1;i<=n;i++)b[i]=pow(-1,a[i]);ans=(ans+mul(c1,solve(1,n)[k]))%mod;for(i=1;i<=n;i++)b[i]=pow(3,a[i]);ans=(ans+mul(c2,solve(1,n)[k]))%mod;printf("%d",(ans+mod)%mod);
}

转载于:https://www.cnblogs.com/jefflyy/p/8849278.html

[Contest20180415]看无可看相关推荐

  1. 论文解读 | 微信看一看实时Look-alike推荐算法

    作者丨gongyouliu 编辑丨lily 来源 | 授权转载自大数据与人工智能(ID:ai-big-data) 微信看一看的精选文章推荐(见下面图1)大家应该都用过,微信团队在今年发表了一篇文章来专 ...

  2. Scrum模拟微信看一看“疫情专区”的敏捷开发过程

    无论作为产品用户还是管理咨询顾问,都非常非常喜欢微信.自认感情比较克制属于"高冷"挂,但从很多方面都太佩服太崇拜张小龙了(新书里微信也会是最喜欢的案例之一,真的不只是一个产品而已, ...

  3. 第一款鸿蒙摄像头,随时随地看一看!华为首款鸿蒙智能摄像头发布

    原标题:随时随地看一看!华为首款鸿蒙智能摄像头发布 当我们进入科技飞速发展的时代,越来越多的角落开始布控了一些摄像装置.截止到如今,不仅仅在一些公共死角位置安排了电子猫眼,一些养了宠物的年轻人也在家中 ...

  4. 深度学习核心技术精讲100篇(四十)-微信“看一看“内容理解与推荐,背后深层次的技术知多少?

    前言 相信对于不少人而言微信已经成为获取资讯的主要场景.与此同时,由于微信用户群体的庞大,也吸引了大量的内容生产者在微信公众平台创造内容,以获取用户关注.点赞.收藏等.微信内的内容推荐产品:看一看应运 ...

  5. 特斯拉马斯克直聘AI人才:不看学历看能力

    特斯拉马斯克直聘AI人才:不看学历看能力 火,大火,太火了. 这就是特斯拉2020年以来的股价趋势.在最新一轮暴涨后,马斯克都忍不住祭出"大火"表情包,庆祝市值创下新高--1400 ...

  6. php关键词分词搜索 最多匹配的排在最前面_百度搜索引擎工作原理,做Seo的建议看一看 - 蜘蛛池博客...

    原出处:蜘蛛池博客 原文链接:百度搜索引擎工作原理,做Seo的建议看一看 - 蜘蛛池博客 从事SEO(搜索引擎优化)工作的人可以比喻成搜索引擎的贴身管家,作为一名合格称职的管家必须要了解所服务对象的习 ...

  7. 揭秘微信「看一看」如何精准挖掘你感兴趣的内容

    作者:maricoliao,腾讯 WXG 应用研究员 一.背景 随着自媒体时代的蓬勃发展,各类自媒体平台每天涌现出海量信息.微信作为最优质的自媒体平台,每天新发表文章数百万篇.汹涌而来的信息,极大地丰 ...

  8. 20岁以后的男人应该知道的一些事,看一看吧

    酒吧认识的女人,多半就没有必要再留电话了. 2喝酒喝好,不代表喝完吐吐完喝,在量上占个老 3告别网恋吧,相比之下家人介绍的对象还是可以看看,必竟知根知底比较把握,少走弯路. 4周末有带情人泡午夜场的钱 ...

  9. 微信看一看实时相关推荐介绍

    作者:谢若冰,腾讯微信研究员 在推荐系统中,用户在一个时间段经常会关注同一个主题.当用户读完一篇文章时,他往往会想要继续阅读和这篇文章相关的拓展文章.然而,传统的推荐系统feed流难以提供这种深度的拓 ...

最新文章

  1. SpringBoot配置postgre多数据源(亲测有效!!!)
  2. android api在线文档_通过 API 远程管理 Jenkins
  3. php7不兼容phalcon_Phalcon7
  4. 如何测试程序是否_软件开发过程中,如何进行自动化测试?Unit Test 和 UI Test
  5. 【转载】在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
  6. 和 Apple “较上劲”了?Google 解决 Cookie 隐私问题上拒绝“一刀切”
  7. vue识别不了.ico后缀的图片,显示[object Module]
  8. 使 32 位程序使用大于 2GB 的内存
  9. os模块,os.path模块,subprocess模块,configparser模块,shutil模块
  10. RSLogix 5000下载程序方法
  11. C语言自学之路三(循环、选择、函数、数组)
  12. Oracle数据库(定义、特点、体系结构)
  13. CORTEX:我知道你在真笑还是假笑 | 前辅助运动区的激活与对笑声传染性和真实性的感知
  14. 论文|Jointly Pre-Training Transformers on Unpaired Images and Text
  15. 全力配合金融改革,尝试期货投资基金
  16. 《C Primer Plus》学习笔记—第9章
  17. gulp : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\gulp.ps1
  18. 教师查询系统C语言,C语言教师管理系统代码
  19. 笔记本电脑键盘失效修复方法,我搞了好久
  20. 任天堂国行 Switch OLED 版 评测

热门文章

  1. CSDN 湘苗培优,打造高素质技术人才
  2. 初探团队基于session的探索性测试
  3. Linux学习第三章
  4. Spring+MyBatis
  5. 让编译器对一些警告闭嘴
  6. ORACLE安装参数修改
  7. Javascript的原型链、instanceof与typeof
  8. eval解析JSON中的注意点
  9. 趋势线突破有效的标志
  10. 企业品牌竞争力研究(二):提高企业品牌竞争力的要素(创新SPR理论)