题目链接:https://www.nowcoder.com/acm/contest/36/A
题目大意:给你一个长为n的序列a,有n*(n+1)/2个子区间,问这些子区间里面和为完全平方数的子区间个数。
思路:暴力。看代码。
代码:
#include<stdio.h>
const int maxn=1e5+9;
int m[maxn*10];//记录a[i]出现的个数
int a[maxn];//前i项和
long long sum;//记录有多少个完全平方数
int main()
{
int n;
scanf("%d",&n);
a[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]+=a[i-1];
}
m[0]=1;
sum=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j*j<=a[i];j++)
sum+=m[a[i]-j*j];//假设有j*j这个数,看有多少个前缀和为a[i]-j*j的数,
m[a[i]]++;//更新前缀和
}
printf("%lld\n",sum);
return 0;
}