Molly's Chemicals

容易发现整个序列和的绝对值 1014\leq 10^{14},令其为 VV

那么当 k±1k \neq \pm 1 时,kk 的非负整数幂只有 O(logkV)=O(logV)O(\log_k V) = O(\log V) 个不同的小于 VV 的结果。

于是大力枚举 kk 的所有非负整数幂,暴力即可。题目转化为每次给 xx,求区间和为 xx 的数的个数,用前缀和加 map 即可。复杂度两只 log\log

#pragma GCC optimize("-Ofast,fast-math,-inline")
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <map>
using namespace std;

const int N = 1e5 + 5;

int n;
long long a[N], sum[N], k, ans = 0;
map<long long, int> mp;

int main()
{
	scanf("%d%lld", &n, &k);
	long long rk = k;
	for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), sum[i] = sum[i - 1] + a[i];
	for (int i = 1; i <= n; i++)
	{
		ans += mp[sum[i] - 1];
		if (sum[i] == 1) ans++;
		mp[sum[i]]++;
	}
	while (true)
	{
		if (k == 1) break;
		if (k > (long long)1e14 || k < (long long)-1e14)
		{
			break;
		}
		mp.clear();
		for (int i = 1; i <= n; i++)
		{
			ans += mp[sum[i] - k];
			if (sum[i] == k) ans++;
			mp[sum[i]]++;
		}
		k *= rk;
	}
	printf("%lld\n", ans);
	return 0;
} // 1
posted @   HappyBobb  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示