2752. [济南集训 2017] 数列运算

★★☆   输入文件:sequenceQBXT.in   输出文件:sequenceQBXT.out   简单对比
时间限制:1 s   内存限制:512 MB

【题目描述】

在纸上有一个长为n的数列,第i项值为ai。

现在小A想要在这些数之间添加加号或乘号。问对于不同的2n−1种方案,

所有答案的和是多少?

由于数据范围较大,所以输出对1000000007取模的结果。

【输入格式】

输入第一行一个整数n表示数列的长度。

之后一行n个整数,第n个整数表示数列的第i项ai。

【输出格式】

m行,第i行表示第i个询问的答案对1000000007取模的结果。

【样例输入】

3
1 2 4

【样例输出】

30

【数据范围与约定】

对于30%的数据,1≤n≤10,1≤ai≤105

对于另外30%的数据,1≤n≤1000,ai=1

对于90%的数据,1≤n≤1000,1≤ai≤105

对于100%的数据,1≤100000,1≤ai≤109

【来源】

清北学堂济南NOIP集训二试T2

思路:

一个数列,长为n

在里面加n-1个加号或乘号

问方案所有方案的数列和

有部分数据数列全为1

那么枚举有i个乘号,ans=Σ(C(n-1,2)*(n-i))

一、基本思路O(n^3)

dp[i]表示到第i个数的答案

枚举前一个加号在j后面

那么到j一共有2^(j-1)种方案,每种方案在j后面都是一个加号,加号后面全是乘号

令tot=a[j+1]*a[j+2]……*a[i]

dp[i]=Σ(dp[j]+2^(j-1)*tot)

#include<cstdio>
#include<cstring>
#define mod 1000000007
using namespace std;
int n,a[];
long long cf[];
long long dp[],pre[],inv[];
long long pow(long long a,long long b){
long long res=;
while(b){
if(b&)
res=res*a%mod;
a=a*a%mod;
b>>=;
}
return res;
}
int main(){
freopen("sequenceQBXT.in","r",stdin);
freopen("sequenceQBXT.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
cf[]=;
for(int i=;i<=n;i++) cf[i]=cf[i-]*%mod;
long long tot;
pre[]=;
for(int i=;i<=n;i++) pre[i]=pre[i-]*a[i]%mod;
for(int i=;i<=n;i++) inv[i]=pow(pre[i],mod-);
long long sum1=,sum2=;
for(int i=;i<=n;i++){
dp[i]=(sum1+sum2*pre[i]%mod)%mod;
sum1=(sum1+dp[i])%mod;
sum2=(sum2+cf[i-]%mod*inv[i]%mod)%mod;
}
printf("%I64d",dp[n]);
}

cogs 2752. [济南集训 2017] 数列运算的更多相关文章

  1. [济南集训 2017] 求gcd之和

    题目大意: 求\(\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)\) 解题报告: 有一个结论:一个数的所有因子的欧拉函数之和等于这个数本身 运用这个我们可以开始推: \(\sum_{ ...

  2. [LOJ 6029]「雅礼集训 2017 Day1」市场

    [LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...

  3. LOJ_6045_「雅礼集训 2017 Day8」价 _最小割

    LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...

  4. Loj #2331. 「清华集训 2017」某位歌姬的故事

    Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...

  5. Loj #2324. 「清华集训 2017」小 Y 和二叉树

    Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...

  6. Loj #2321. 「清华集训 2017」无限之环

    Loj #2321. 「清华集训 2017」无限之环 曾经有一款流行的游戏,叫做 *Infinity Loop***,先来简单的介绍一下这个游戏: 游戏在一个 \(n \times m\) 的网格状棋 ...

  7. Loj 2320.「清华集训 2017」生成树计数

    Loj 2320.「清华集训 2017」生成树计数 题目描述 在一个 \(s\) 个点的图中,存在 \(s-n\) 条边,使图中形成了 \(n\) 个连通块,第 \(i\) 个连通块中有 \(a_i\ ...

  8. 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)

    [UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...

  9. 「雅礼集训 2017 Day7」事情的相似度

    「雅礼集训 2017 Day7」事情的相似度 题目链接 我们先将字符串建后缀自动机.然后对于两个前缀\([1,i]\),\([1,j]\),他们的最长公共后缀长度就是他们在\(fail\)树上对应节点 ...

随机推荐

  1. Springboot分布式锁实践(redis)

    springboot2本地锁实践一文中提到用Guava Cache实现锁机制,但在集群中就行不通了,所以我们还一般要借助类似Redis.ZooKeeper 之类的中间件实现分布式锁,下面我们将利用自定 ...

  2. js 现给数字加三位一逗号间隔的种方法

    方法一:(ie下有问题) <script type= "text/javascript"> var num_s = "1232134456.546 " ...

  3. Vijos——T 1016 北京2008的挂钟 || 洛谷—— P1213 时钟

    https://www.luogu.org/problem/show?pid=1213 题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点 ...

  4. 产品经理---- idea good idea

    想问题有不同的思想. 1.先去娶老婆再生娃. 我有啥,我能用这些做啥? [大概这就是泯然众人的思想吧] 2.先做衣服后长肉 我想要做个啥?然后我需要怎么做?怎么做的什么? 好的产品经理我认为是第二种. ...

  5. iOS相册实现与AssetsLibrary框架使用

    概述 在iOS中如果想要获取手机相册里面的图片或者视频的话就要用到系统自带的AssetsLibrary框架,AssetsLibrary.framework中包含以下文件 #import <Ass ...

  6. HDU 3342 -- Legal or Not【裸拓扑排序 &amp;&amp;水题 &amp;&amp; 邻接表实现】

    Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  7. layer iframe加载单个图片或者加载页面

    加载单个图片 layer.open({ type: , title: false, closeBtn: , area: '150px', skin: 'layui-layer-nobg', //没有背 ...

  8. Android面试题集

    前几天整理了Java面试题集合,今天再来整理下Android相关的面试题集合.假设你希望能得到最新的消息,能够关注https://github.com/closedevice/interview-ab ...

  9. CodeForces--606A --Magic Spheres(模拟水题)

    Magic Spheres Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submi ...

  10. 13.ubuntu下Qt5无法使用中文的问题解决

    1.首先安装fcitx-frontend-qt5 sudo apt-get install fcitx-frontend-qt5 这个应该是默认安装的,然后查看fcitx-frontend-qt5 的 ...