Codeforces Round #400 (Div. 1 + Div. 2, combined) 776C Molly's Chemicals
来源:互联网 发布:微博怎么认证淘宝卖家 编辑:程序博客网 时间:2024/06/06 00:10
时间限制:1S / 空间限制:256MB
【在线测试提交传送门】
【问题描述】
Molly Hooper has n different kinds of chemicals arranged in a line. Each of the chemicals has an affection value, The i-th of them has affection value ai.Molly wants Sherlock to fall in love with her. She intends to do this by mixing a contiguous segment of chemicals together to make a love potion with total affection value as a non-negative integer power of k. Total affection value of a continuous segment of chemicals is the sum of affection values of each chemical in that segment.Help her to do so in finding the total number of such segments.给定n个整数,和一个整数k,现在问你有多少个区间满足:该区间的各个数的和,等于k的x次方,其中x从0到无穷的非负整数。
【输入格式】
The first line of input contains two integers, n and k, the number of chemicals and the number, such that the total affection value is a non-negative power of this number k. (1 ≤ n ≤ 10^5, 1 ≤ |k| ≤ 10).Next line contains n integers a1, a2, ..., an ( - 10^9 ≤ ai ≤ 10^9) — affection values of chemicals.第一行,两个整数n和k (1 ≤ n ≤ 10^5, 1 ≤ |k| ≤ 10)。第二行,n个整数 a1, a2, ..., an ( - 10^9 ≤ ai ≤ 10^9) 。
【输出格式】
Output a single integer — the number of valid segments.输出一行,一个整数,表示符合要求的区间的数量。
【输入样例1】
4 22 2 2 2
【输出样例1】
8
【样例说明】
Do keep in mind that k0 = 1.In the first sample, Molly can get following different affection values: •区间和为2: segments [1, 1], [2, 2], [3, 3], [4, 4]; //2的1次方•区间和为4: segments [1, 2], [2, 3], [3, 4]; //2的2次方•区间和为6: segments [1, 3], [2, 4]; //6不是k的x次方,不统计在内•区间和为8: segments [1, 4]. //2的3次方Out of these, 2, 4 and 8 are powers of k = 2. Therefore, the answer is 8.符合要求的区间的数量共8个。In the second sample, Molly can choose segments [1, 2], [3, 3], [3, 4].在样例2中,共有3个区间符合要求。
【输入样例2】
4 -33 -6 -3 12
【输出样例2】
3
慎入:以下为解题思路和参考代码,请务必先自行思考!
【解题思路】
先求出前缀和,也就是求有多少个sum[r]-sum[l]=pow(k,x),r>l。x最大只有lg(1e14),可以将式子变为sum[r]-pow(k,x)=sum[l]。每次结束后将前缀和放到map里。
【参考代码】
#include<bits/stdc++.h>using namespace std;#define LL long longconst LL INF=1e14;int n;LL k,sum[100050];map<LL,LL>x;set<LL>a;set<LL>::iterator it;int main(){ while(~scanf("%d %lld",&n,&k)) { x.clear(); a.clear(); sum[0]=0; for(int i=1;i<=n;i++) scanf("%lld",&sum[i]),sum[i]+=sum[i-1]; a.insert(1); LL temp=k; for(int i=1;i<=60;i++) { if(temp>INF) break; a.insert(temp); temp*=k; } LL ans=0; x[0]=1; for(int i=1;i<=n;i++) { for(it=a.begin();it!=a.end();it++) ans+=x[sum[i]-*it]; x[sum[i]]++; } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- Codeforces Round #400 (Div. 1 + Div. 2, combined) 776C Molly's Chemicals
- ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals
- Codeforces Round #400 (Div. 1 + Div. 2, combined)C. Molly's Chemicals【思维】
- Codeforces Round #400 (Div. 1 + Div. 2, combined) C:Molly's Chemicals(前缀+思维)
- ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals
- Codeforces Round #400 (Div. 1 + Div. 2, combined)C. Molly's Chemicals
- Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals 区间和、构造、前缀的后缀
- 【前缀和 && 思维转换】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined)Molly's Chemicals
- Codeforces Round #400 C. Molly's Chemicals
- Codeforces Round #400 C. Molly's Chemicals (二分)
- Codeforces Round #400 C. Molly's Chemicals [二分]
- Codeforces Round #400 C. Molly's Chemicals(前缀和)
- Codeforces Round #400 (Div. 1 + Div. 2, combined) C
- 【codeforces 776C】Molly's Chemicals
- 【codeforces 776C】Molly's Chemicals 题解
- codeforces 776c Molly's Chemicals 【思维】
- Codeforces 776C-Molly's Chemicals
- CodeForces 776C Molly's Chemicals
- Warning: No message defined for username
- Drools7.5.0教程(1)-简介
- 软件工程中的文档轨迹化
- Java.lang.OutOfMemoryError: PermGen space及其解决方法
- 互联网时代下的大数据
- Codeforces Round #400 (Div. 1 + Div. 2, combined) 776C Molly's Chemicals
- web安全概略
- 平衡树模板
- C语言实验——计算1到n的和(循环结构)
- 分布式锁与实现(一)——基于Redis实现
- Python学习笔记1-List,tuple
- 关于IO与NIO的资料整理
- Spring Boot教程
- 微电网研究相关_实际背景搜集20171118