cogs 2752. [济南集训 2017] 数列运算
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] 数列运算的更多相关文章
- [济南集训 2017] 求gcd之和
题目大意: 求\(\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)\) 解题报告: 有一个结论:一个数的所有因子的欧拉函数之和等于这个数本身 运用这个我们可以开始推: \(\sum_{ ...
- [LOJ 6029]「雅礼集训 2017 Day1」市场
[LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...
- LOJ_6045_「雅礼集训 2017 Day8」价 _最小割
LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...
- Loj #2331. 「清华集训 2017」某位歌姬的故事
Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...
- Loj #2324. 「清华集训 2017」小 Y 和二叉树
Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...
- Loj #2321. 「清华集训 2017」无限之环
Loj #2321. 「清华集训 2017」无限之环 曾经有一款流行的游戏,叫做 *Infinity Loop***,先来简单的介绍一下这个游戏: 游戏在一个 \(n \times m\) 的网格状棋 ...
- Loj 2320.「清华集训 2017」生成树计数
Loj 2320.「清华集训 2017」生成树计数 题目描述 在一个 \(s\) 个点的图中,存在 \(s-n\) 条边,使图中形成了 \(n\) 个连通块,第 \(i\) 个连通块中有 \(a_i\ ...
- 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...
- 「雅礼集训 2017 Day7」事情的相似度
「雅礼集训 2017 Day7」事情的相似度 题目链接 我们先将字符串建后缀自动机.然后对于两个前缀\([1,i]\),\([1,j]\),他们的最长公共后缀长度就是他们在\(fail\)树上对应节点 ...
随机推荐
- Inflation System Properties
https://blogs.oracle.com/buck/inflation-system-properties I wanted to write a quick post about the t ...
- C#中的string驻留池
刚开始学习C#的时候,就听说CLR对于String类有一种特别的内存管理机制:有时候,明明声明了两个String类的对象,但是他们偏偏却指向同一个实例.如下: String s1 = "He ...
- valueof这个万能方法,将string转换为int或者int转换为string都可以
private static String testString = "111"; int stringInt = Integer.valueOf(testString); Str ...
- 积跬步,聚小流------Bootstrap学习记录(1)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
题目链接:http://codeforces.com/problemset/problem/455/A A. Boredom time limit per test 1 second memory l ...
- JavaSE 最easy出错的几个简单的问题
案例1. package cn.itcast.oop; public class ThisDemo { public static void main(String[] args) { Student ...
- oracle性能检测sql语句
1. 监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev",sum(decode(wait_Time,0,1,0)) & ...
- 11. Container With Most Water[M]盛最多水的容器
题目 Given \(n\) non-negative integers \(a_1,a_2,\cdots,a_n\), where each represents a point at coordi ...
- C++之易混淆知识点四---虚函数与虚继承
C++面向对象中,虚函数与虚继承是两个完全不同的概念. 一.虚函数 C++程序中只要类中含有虚拟函数,编译程序都会为此类生成一个对应的虚拟函数跳转表(vtbl),该虚拟函数跳转表是一个又若干个虚拟函数 ...
- Sqlite简单操作
1.student类 public class Student { int id; String name; String sex; String address; int money; public ...