GCD partition
本题思路要我们找最大公约数,所以说gcd(a,b,c,d);而这些a, b, c ,d是由累加而得的,对吧.a , b, c ,d可以进行等价放缩变为gcd(sum1,sum2);sum1=a+b,sum2=c+d; ok 所以gcd()最大的情况肯定是只有两个数据,所以只要分成两份,及k==2; 遍历所有情况,这里可以用前缀和
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int N=2e5+10;
ll q[N];
void solve()
{
int n;
cin>>n;
ll sum=0;
for(int i=1;i<=n;i++)
{
int tmp;
cin>>tmp;
sum+=tmp;
q[i]=q[i-1]+tmp;
}
ll res=1;
for(int i=1;i<n;i++)
{
ll cmp1 = q[i];
ll cmp = sum-q[i];
res=max(res,__gcd(cmp1,cmp));
}
cout<<res<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
solve();
}
本蒻笱的烂代码如上, 望采纳,如有错误请指出