这题用尺取法是怼不出来的。。。

一开始看到区间和等于k的幂,并且有负数,首先想到将前缀和排序后用尺取法,但因为排序后的前缀和次序是乱的,只适用带绝对值的情况(poj2566),所以无法做。

看了题解后发现其实是个简单的dp

//sum[r]=sum[l]+kk;
//ans+=mp[sum[i]-kk];其实是个dp
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 100005 int n,a[maxn];
ll ans,kk,k,sum[maxn]; void solve(ll kk){
map<ll,int>mp;
for(int i=;i<=n;i++){
mp[sum[i]]++;
ans+=mp[sum[i]-kk];
}
} int main(){
scanf("%d%lld",&n,&k);
sum[]=ans=;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
sum[i]=sum[i-]+a[i];
}
if(k==){
solve();
printf("%lld\n",ans);
return ;
}
if(k==-){
solve();solve(-);
printf("%lld\n",ans);
return ;
} kk=;
while(kk<=(ll)*n){
solve(kk);
kk*=k;
}
printf("%lld\n",ans);
return ;
}

cf776c的更多相关文章

随机推荐

  1. Elasticsearch5.5 多机集群配置和x-pack安装配置

    x-pack安装配置 https://www.elastic.co/guide/en/elasticsearch/reference/current/installing-xpack-es.html ...

  2. Codeforces 950 C. Zebras

    http://codeforces.com/contest/950/problem/C 题意: 给出一个01序列,问能否将这个序列分为若干个0开头0结尾的序列 输出方案 如果有解,几个1能在一个序列就 ...

  3. ObservableData-另一种姿势的观察者模式

    使用 数据的定义 public class TestModel { private static TestModel mInstance; public static TestModel GetIns ...

  4. SQL语句(二)创建带主键和约束的数据表

    内容摘要 创建带主键和约束的表 创建带组合主键和外键的表 1. 创建带主键和约束的表 Student (学生表) CREATE TABLE Student ( sclass ) NOT NULL, - ...

  5. toolbar 相关

    1.改变toolbar 返回键和扩展按钮颜色,只需要在style文件中添加这一行即可: 2.toolbar的title是否显示是这样控制的:

  6. oracle先排序再分页

    只做简单记录 按操作时间排序1 SELECT A.*, ROWNUM RN FROM (SELECT * FROM v_log) A ORDER BY operatetime DESC 结果 可以发现 ...

  7. C#在Win10与非Win10 Windows系统鼠标滚动编程的一点区别。

    C#在win10和非Win10上处理鼠标滚动有一些区别,建一个Form1,放置一个FlowLayoutPanel ,类型的Panel1 Panel.MouseWheel += PanelOnMouse ...

  8. java实现网页验证码

    Servlet: package cn.bdqn.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletExceptio ...

  9. Emacs org-mode导出html出错

    不知道为什么,当org文件中含有#+TITLE:xxx时,导出会报类似下面的错误: Wrong type argument: listp, #("xxx" 0 3 (:parent ...

  10. php+mysql注入

    SQL简单命令介绍: mysql.exe -u 用户名  -p  密码  -h  ip地址 show databases;查看数据库 select version();php注入下的版本号 use d ...