来源:https://ac.nowcoder.com/acm/problem/14600
数据:
6
0 1 0 9 1 0
s[1] | s[2] | s[3] | s[4] | s[5] | s[6] |
---|---|---|---|---|---|
0 | 1 | 0 | 9 | 1 | 0 |
0 | 1 | 1 | 10 | 11 | 11 |
第二行为输入的数组数据 第三行为其前缀和
cnt[0]=2时代表第一个数为完全平方数且有一个序列前缀和为0,两种情况相加为2
比如我们希望搜到一个前缀和为1的数,但此时还未在我们的考虑情况之内,因此搜不到,s[1]=0
但有时也有可能是根本不存在前缀和为1的数
注释掉的代码为调试所用
#include <bits/stdc++.h>
using namespace std;
int s[100100],cnt[100100];
int ans;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
s[i]=s[i-1]+x;
}
cnt[0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j*j<=s[i];j++