思路:暴力枚举,枚举每种最终每堆石头的数量和。
AC代码
#include<iostream>
using namespace std;
int a[1000005];
long long sum=0;
long long ans;
long long cnt=0;
long long s2=0;
int main()
{
int T,n;
cin>>T;
while(T--)
{
cin>>n;
ans=n-1;
sum=0;
for(int i=1;i<=n;++i)
{
cin>>a[i];
sum+=a[i];
}
if(sum==0)
{
cout<<"0"<<endl;
continue;
}
else for(int i=1;i<sum;++i)
{
if(sum%i==0)
{
cnt=0,s2=0;
int j;
for(j=1;j<=n;++j)
{
s2+=a[j];
if(s2==i)
{
s2=0;
cnt++;
}
else if(s2>i)
{
break;
}
}
if(j>n) ans=min(ans,n-cnt);
}
}
cout<<ans<<endl;
}
return 0;
}