题目链接

题意:给出一个有n个数的序列,还有一个k,问在这个序列中有多少个子序列使得sum[l, r] = k^0,1,2,3……

思路:sum[l, r] = k ^ t, 前缀和sum[r] = sum[l-1] + k^t。即如果后面有一段序列使得sum[l,r] = k^t,那么它可以转化为前缀和相减使得这一段大小为k^t,即sum[i] = sum[j] + k^t (1 <= j < i)。

那么对于处理好的每一个前缀和,直接往后面加上k^t(0<=t<=x,k^x是不超过题目范围的数)。然后在后面遍历的时候直接加上对应那个数的权值。

因为数据很大,所以只能用map来装权值。

代码实现:

 #include<bits/stdc++.h>
#define ll long long
using namespace std;
ll f[];
ll k_t[];
int main()
{
int n,k,i,j,cnt;
while(cin>>n>>k)
{
map<ll,int>mp;
memset(f,,sizeof(f));
memset(k_t,,sizeof(k_t));
for(i=;i<=n;i++)
{
cin>>f[i];
f[i]+=f[i-];
}
k_t[]=;cnt=;
if(k==-)k_t[]=-,cnt++;
else if(k!=)
{
ll temp=k;
while(temp<1e15)
{
k_t[cnt++]=temp;
temp*=k;
}
}
ll ans=;
for(i=;i<cnt;i++)mp[k_t[i]]=;
for(i=;i<=n;i++)
{
if(mp[f[i]])ans+=mp[f[i]];
for(j=;j<cnt;j++)
mp[f[i]+k_t[j]]++;
}
cout<<ans<<endl;
}
return ;
}

最新文章

  1. pylot是一款开源的web性能测试工具
  2. JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)
  3. static 与 final 修饰符
  4. javascript-权威指南读书笔记(1)
  5. LiangNa Resum
  6. CentOS7.0分布式安装HADOOP 2.6.0笔记-转载的
  7. 手机自动化测试:appium源码分析之bootstrap十四
  8. JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例
  9. jQuery给表单设置值
  10. 深入浅出AQS之独占锁模式
  11. Delphi 项目配置选项
  12. 一键安装Davinci
  13. 使用Intellij IDEA将web项目导出为war包
  14. 使用redis-cli --pipe快速插入数据
  15. Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局
  16. ERP采购业务(三十七)
  17. JAVA里的VO、BO、PO分别指什么?
  18. 什么是Less、typescript与webpack?
  19. Android 获取闹钟引发的血案
  20. Spring+Quartz的版本问题

热门文章

  1. VSCode 运行go test显示打印日志
  2. 《转》PyQt4 精彩实例分析* 实例2 标准对话框的使用
  3. 【BZOJ】2186 沙拉公主的困惑
  4. java.util包下面的类---------01---示意图
  5. Python菜鸟之路:Python基础-类(1)——概念
  6. vue 计算属性和监听器
  7. java 从零开始 第二天
  8. RLearning第2弹:创建数据集
  9. Python基础(4)_字典、集合、bool值
  10. vs2008 发布网站时丢失文件问题