题目链接:
题目描述
星神是来自宇宙的
所以珂朵莉也是吧
所以我就出了个题
给你一个长为n的序列a,有n*(n+1)/2个子区间,问这些子区间里面和为完全平方数的子区间个数
输入描述:
第一行一个数n 第二行n个数表示序列a
输出描述:
输出一个数表示答案
示例1
输入
6 0 1 0 9 1 0
输出
11
备注:
1 <= n <= 100000
0 <= ai <= 10
题解:求前缀和,然后标记比当前小完全平方数的数的个数,直接加在答案上。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int n;
int a, b[maxn*10];
int main()
{
scanf("%d", &n);
long long ans = 0;
int sum = 0;
b[0] = 1;
for(int i = 0; i < n; i++){
scanf("%d", &a);
sum += a;
for(int j = 0; j <= 1000 && j * j <= sum; j++) ans += b[sum-j*j];
b[sum]++; //标记个数
}
printf("%lld\n", ans);
return 0;
}