题意:给你n个数(1<=x<=10),问这n个数所有的子区间的和有多少个是完全平方数
题解:处理一个前缀和,并加一个前缀和的值的计数数组,再枚举所有小于当前前缀和的所有完全平方数,结果就出来了。
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <cmath>
#define LL long long
#define INF 0x3f3f3f3f
#define MOD 1000000007
const int maxn = 1e6 + 5;
const double eps = 1e-8;
using namespace std;
int sum[maxn];
int main(){
int n;
LL ans = 0;
LL a = 0;
sum[0] = 1;
cin >> n;
for(int i=1; i<=n; i++){
int x;
cin >> x;
a += x;
for(int j=0; j*j<=a; j++){
ans += sum[a - j*j];
}
sum[a]++;
}
cout << ans << endl;
}